私は [〜#〜] wpf [〜#〜] コードを書いています。これは、約10,000ポイントを含む接続された線であるリアルタイムプロットを示しています。コンピューターに画像が表示されるまで約5秒かかります。誰かがそれをより速くそして0.5秒以内にするアイデアを持っていますか?
class eee : FrameworkElement
{
public eee()
{
_children = new VisualCollection(this);
Random Rand = new Random();
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dx = dv.RenderOpen())
{
Pen drawingPen = new Pen(Brushes.Black, 1);
double x=Rand.Next(300);
double y = Rand.Next(300);
for (double i = 0; i < 1000; i = i + 0.1)
{
y = 100 + Rand.Next(100);
dx.DrawLine(drawingPen, new Point(i, x), new Point(i + 1, y));
x = y;
}
}
_children.Add(dv);
}
Charles Petzold まさにそれを行います。私のホストではさらに高速で(<0.3秒)、ポイントはDataBoundです!! ;)
Tamir Khason これも行を使用して行い、ビットマップスタイルのパフォーマンスWPFについてさらに詳しく説明します ここ 。
Rico Mariani 3D高性能グラフィックスに関するガイダンスがあります。基本的に値型を活用すると、よく考えればスループットを向上させることができます。
Jianzhong Zhang このテーマに関する私の新しいお気に入りのチュートリアルを提供します。3D散布図は、アニメーション化されたインタラクティブな数万のデータポイントです。
コードサンプルは、1)実際にはサンプルではないものを試すためのテスト、または2)宿題だと思います。
OnRenderをオーバーライドして、次のようなことを試してください。
Pen drawingPen = new Pen(Brushes.Black, 1);
protected override void OnRender(DrawingContext dc)
{
dc.DrawRectangle(Background, null, new Rect(RenderSize));
double x=Rand.Next(300);
double y = Rand.Next(300);
for (double i = 0; i < 1000; i = i + 0.1)
{
y = 100 + Rand.Next(100);
dc.DrawLine(drawingPen, new Point(i, x), new Point(i + 1, y));
x = y;
}
}
または、実際のデータを使用する場合は、視覚的なコンテキストの解像度に応じて、すべてのポイントを実際に表示する必要があるかどうかを検討してください。 (スケールが0〜10で、ポイント0.0001,0.00015を生成している場合、それらは実際にスケールで異なります)
線は選択可能である必要がありますか?画像に線を引き、それを画像コントロールのソースとして指定できます。描画は速くなりますが、線を操作する機能が失われます。
Monogame 、XNAに基づいて、生きています。その能力を使用して、巨大なグラフィックパフォーマンスを必要とするいくつかの特別なタスクを解決し、WPFGUIにウィンドウを挿入することもできます。
[〜#〜] xna [〜#〜] を検討しましたか?グラフィックカードを使用すると、処理速度が向上します。