有效地绘制实时波形

时间:2013-01-28 18:56:37

标签: .net wpf performance graph plot

我正在使用以下XAML在WPF中绘制波形:

<Canvas>
    <Path Stroke="Black" StrokeThickness="3">
        <Path.Data>
            <PathGeometry>
                <PathFigure x:Name="figure" IsClosed="False">
                    <PathFigure.Segments>
                        <PolyLineSegment x:Name="polyline"/>
                    </PathFigure.Segments>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
</Canvas>

我有一个简单的计时器每32毫秒运行一次,除了向该行添加一个随机点之外什么都没有:

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
     xPos++;
     polyline.Points.Add(new Point(xPos, yPos + ((int)(rnd.NextDouble() * 10) - 5)));
}

这样可以正常工作,但只要我使用超过10行进行同样的操作,CPU的使用率就会上升。

在使用WPF Profiler(Perforator)检查应用程序时,我可以看到WPF将整个PathGeometry标记为“脏区域”,而不是仅仅更新对屏幕的更改。因此,不是只注意到单个像素被更改,而是在每次更新时重绘几乎完整的形式。

我不知道这是否是CPU使用率过高的原因,但有人可以告诉我如何优化这个(非常简单的)程序,或者我做错了什么?

1 个答案:

答案 0 :(得分:0)

对于实时绘图,您可能最好使用更低级别的东西,这样可以直接调用简单的绘图操作,DrawingVisual可能有效。