高效地绘制实时波形

3

我正在使用以下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行的情况下可以正常运行,但是一旦处理的行数超过了10行,CPU使用率就会飙升。通过使用WPF Profiler(Perforator)检查应用程序,我发现WPF将整个PathGeometry标记为“脏区域”,而不是只更新屏幕上的更改。因此,它在每次更新时重新绘制几乎完整的表单,而不仅仅是注意到单个像素已更改。
我不知道这是否是过度使用CPU的原因,但有人能告诉我如何优化这个(非常简单的)程序,或者我做错了什么吗?

你有没有从折线中删除一些点呢? - Clemens
1个回答

0

对于实时绘图,您可能最好使用一些更低级别的东西,以便直接调用简单的绘图操作,DrawingVisual 可能适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接