【问题标题】:Efficiently plot a real-time waveform有效地绘制实时波形
【发布时间】:2013-01-28 18:56:36
【问题描述】:

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

【问题讨论】:

  • 你有没有从折线上删除几个点?

标签: .net wpf performance graph plot


【解决方案1】:

对于实时绘图,您最好使用更底层的东西,让您直接调用简单的绘图操作,DrawingVisual 可能会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多