WPF で数千のデータ ポイントをグラフ化する最もパフォーマンスの高い方法は? 質問する

WPF で数千のデータ ポイントをグラフ化する最もパフォーマンスの高い方法は? 質問する

財務データを表示するグラフを作成しました。 と を一緒に使用して、接続された線として表示される 10,000 未満のポイントを描画しているときは、パフォーマンスは良好でした。しかしPathGeometry、今度は最大 100,000 ポイントを同時に表示する必要があり (スクロールなし)、50,000 ポイントでもすでに非常に遅くなっています。 を考えていましたが、基本的には をバイト ストリームとして情報を保存するのと同じなので、よくわかりません。これをさらにパフォーマンスを向上させるアイデアをお持ちの方、またはすでに同様のことを実行した方はいらっしゃいますか?PathFigureLineSegmentStreamGeometryPathGeometry

編集: これらのデータ ポイントは描画後は変更されないため、最適化できる可能性がある場合はお知らせください (線分は現在固定されています)。

編集: StreamGeometry を試しました。何らかの理由で、グラフィックの作成にさらに時間がかかりましたが、これは問題ではありません。すべてのポイントを描画した後にチャートに描画するのは、以前の方法と同じくらい遅いです。WPF で処理するにはデータ ポイントが多すぎるだけだと思います。

編集: 少し実験してみたところ、以前は double だった座標を int に変換して WPF アンチエイリアシングのサブピクセル ラインを防ぐことで、パフォーマンスが少し向上することに気付きました。

編集: 線分の数を減らすよう提案していただいたすべての回答に感謝します。階段状の線分については水平解像度の最大 2 倍まで、単純な線分については水平解像度の最大 1 倍まで線分の数を減らしたところ、パフォーマンスはかなり良くなりました。

ベストアンサー1

レンダリングしようとしているポイントの数を減らすことを検討してください。50,000ポイントのデータがあるかもしれませんが、すべてを画面に収めることはおそらくできません。すべてのポイントを1つのディスプレイにチャート化したとしても、100,000すべてを描画するには、水平解像度のピクセルが必要です。D3D でも描画するには多すぎます。

2,048 ピクセル程度になる可能性が高いので、グラフ化するポイントを減らして、画面に収まり、頂点が 2,000 個しかない近似曲線を描くこともできます。たとえば、ユーザーが 10,000 個のポイントを含む時間枠をグラフ化する場合、グラフ化する前に、その 10,000 個のポイントを 1,000 個にダウンサンプリングします。単純な平均化から、中央近傍法、ガウス畳み込み法 (私の提案) まで、さまざまな手法を試すことができます。双三次補間画面解像度の1/2を超える数の点を描くのは無駄になるだけだ

ユーザーがグラフの一部を拡大すると、再サ​​ンプリングして解像度を高め、より正確な曲線フィッティングを実現できます。

おすすめ記事