我正在使用以下 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 使用率过高的原因,但有人可以告诉我如何优化这个(非常简单的)程序,或者我做错了什么?