質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

16096閲覧

C#のグラフ描画を高速化したい

MagiSystem

総合スコア10

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/02/07 12:58

前提・実現したいこと

・C#で折れ線グラフで表示し、Seriesは10項目程度、Pointsは20000以上を想定
・Points追加は100ms毎に行う
の状況の下で下記の2つ
①マウスホイールで拡大・縮小をスムーズに行う
②クリック位置の縦線カーソルを"カーソルを左へ移動するボタン"や"カーソルを右へ移動するボタン"で移動する
を実現したいです。

発生している問題

①については拡大・縮小共にできるのですが、操作全般的にデータ数(Points)が5000を超えたあたりから、かなり重くなる。
現在Points.AddXYでデータ追加を行っているのですが、データの持ち方が重くしている要因などがありますでしょうか?

Chart.Series[0].Points.AddXY(cnt, double.Parse(data[0]));
Chart.Series[1].Points.AddXY(cnt, double.Parse(data[1]));

Chart.Series[N].Points.AddXY(cnt, double.Parse(data[N]));

②についてはクリック位置の縦線カーソルはできるのですが、左右キーにより縦線カーソルを移動させる方法がわからないです。
マウスクリック時は下記で縦線カーソルを設定できるのですが、"カーソルを左へ移動するボタン"や"カーソルを右へ移動するボタン"のクリックイベントで下記のmousePointに該当する情報の設定が分からない状況です。

Point mousePoint = New Point(e.X, e.Y);
Chart1.ChartAreas(0).CursorX.SetCursorPixelPosition(mousePoint, True);

ご助言頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

・速度について
全てのデータをAddXYで追加するのではなく、適度に間引いたデータを渡すようすると改善します。1000点を超えるようなグラフを表示しても、画面の解像度を考えたら視認できませんから意味がありません。
500082=80KBと言うとCPUのL1キャッシュに収まりきらなくなる程度のサイズです。このサイズのデータに対して頻繁に全件走査して、描画処理などやっていれば遅くなるのが当然です。最終的には320KBとL2キャッシュにも収まらないデータを対象としているのですから、適度に間引いて処理する事を行わないと大幅に遅くなります。

投稿2018/02/07 15:10

Kunihiro_Narita

総合スコア472

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MagiSystem

2018/02/09 12:16

コメントありがとうございます。間引くことも考えてみます。
guest

0

毎回Parseするより、Parse済みデータを保持したほうがいいと思います。
また、Chart.DataSourceを使ってみてはどうでしょうか?

投稿2018/02/08 02:10

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MagiSystem

2018/02/09 12:26

コメントありがとうございます。 DataSourceを用いて描画はできたのですが、データ登録数(DataTableのRows)が多くなるにつれてDataBindが遅くなる傾向があり、厳しい状況です。DataBindを1秒おきに変更してみたのですが、10000を超えた当たりから1秒を超える状況で、もう少し情報を頂けると助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問