.net - 高效绘制实时波形

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

最佳答案

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

关于.net - 高效绘制实时波形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14569115/

相关文章:

.net - WCF 与 Windows 服务中托管的 WCF 用于长时间运行的任务

.net - .NET XmlSerializer 类可以将 InnerXml 反序列化为字符串吗?

SQL Server 高 CPU 和 I/O 事件数据库调整

.net - EF - 添加到由 Id 设置的关联

wpf - MVVM Light : how to send a parameter to ViewModel (when opening new window)?

php - 寻找一种在php中的2个队列之间交替的有效方法

c# - 我应该如何使用 &str、Option 和 String 编码 Rust 函数并在 C# 中使用它?

c# - .NET 窗体设计 - 按钮组 "Photoshop Tool Style"

c# - 为我覆盖 Mahapps Metro 风格标题 Tabitem

c# - WPF Datagrid 根据值触发行颜色