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