大量のデータをMSChartを使用して表示するときの描画時間が遅い

C#のFormアプリケーションで5000ほどのデータをChartで描画すると重い時と重くない時があったので忘備録として記述

AddXY()を利用して面グラフと折れ線グラフの2種類のデータを描画していた。
5000のデータを描画するとものすごい遅い。開発用のPCだと実は軽かったが、テスト用のウルトラモバイルPC等で描画すると10分ぐらい描画が止まる。
UIスレッドのReflesh()自体に相当負荷がかかるみたいで使いものにならない。
また、マウスオーバーで出現するツールチップを入れているとものすごく重い。

原因

原因は面グラフとツールチップ。2つが組み合わさる場合の面グラフの描画がものすごく重い。折れ線グラフの7倍ほどだった。
以下秒数

面グラフ

1.2 sec

折れ線グラフ

0.17 sec

ツールチップがない場合

面グラフ

0.0220167 sec

折れ線グラフ

0.1098249 sec


これは、同時描画数に関係ない。5000個データが有る内、10を描画しても重くなる。
(もちろん同時描画数が多くなればなるほど重くもなる。)

ということで解決策は

  • 面グラフを描画するかしないかの選択UIを作成する。
  • 面グラフを諦める
  • 他にスライドバーを設置し、描画範囲を指定する。

となると思う。


追記

      • -

処理時間はバージョンによって変動する場合があるので正確な時間計測が何よりも大事。
C#での時間計測のオススメ記述法は以下のサイトを参考。
これ以上のものに今は出会ってない。

C# デバッグ時の処理時間測定ロジックを簡潔に書く | Try&Error テクニカルブログ