WinRT XAML Toolkit, ScatterSeries再描画の性能改善2016年11月03日 08:50


ScatterSeries

WinRT XAML Toolkitのグラフ機能のScatterSeriesでは、BindしているCollectionを入れ替えると、2回目以降、描画に時間がかかる。上図は、1年間の全日の気温をプロットしたもの。初回は数秒なのに、2回目以降は1分近くかかる。改善のために、いろいろ試してみたが、Seriesを全消去して再登録すると劣化が抑えられる。

XAML ScatterSeries定義

XAMLの定義。Chartに軸を2本、X軸とY軸。Seriesを2つ、点描画(ScatterSeries)と回帰直線(LineSeries)。再描画で問題になるのは、点描画のItemsSourceで定義したPointsを更新したとき。

ScatterSeriesをプログラムで更新

これを、Bind連携による自動更新に任せず、プログラムで制御。まず、2つあるSeries(ScatterSeriesとLineSeries)をClear()で全消去。点描画の方のみの削除では、効果がない。その上で、XAMLの定義に沿って、改めてプログラムでSeriesを登録していく。

おそらく、XAMLのメモリ管理まわりの処理が重い。処理時間を計ると、BindされているObservableCollectionの更新はすぐに終わるが、更新イベントを受信したXAML側の処理に時間がかかっている。Seriesの定義全体をクリアすることで、必要なメモリ領域が改めてクリーンな状態で確保され、スムーズに処理が進むと思われる。反対に、一度確保したメモリ領域の再利用は、いろいろ手間がかかる。このとき、複数のSeriesは、別々にではなく、ひとつの単位で管理されている様子。

なお、もう一つ上位に遡って、Chart自体を消去し、プログラムで再登録するのは、逆効果。余計に時間がかかる。これは、起動時の初期化処理に任せるのがよい。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2016/11/03/8241120/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。