WPF DrawLine 性能问题

WPF DrawLine performance issue

我需要在我的项目中绘制大约 12.000 行。当我使用WinForms时,感谢pictureBox的e.Graphics.DrawLine功能,它很好。但是当我将项目迁移到 WPF 时——这是我的新手——我决定使用 canvas,并在其上画线作为 children。事实证明这是最不充分的方法。但我就是无法成功其他方法。这是我一直用来在 canvas 上画线的函数:

public void DrawLine(int x, int y1, int y2, System.Drawing.Color color)
{
            Line top = new Line();
            top.Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B));
            top.StrokeThickness = 5;

            top.X1 = x;
            top.Y1 = y1;
            top.X2 = x;
            top.Y2 = y2;

            Canvas.SetTop(top, 0);
            Canvas.SetLeft(top, 0);
            scanCanvas.Children.Add(top);
}

当我尝试使用秒表对我的整体绘图功能进行基准测试时,它说只有 300 毫秒,这看起来不错。但是我在屏幕上看到的内容有大约 2-3 秒的延迟。我怎样才能比这更快地在 canvas 上画线?

查看使用 StreamGeometry 并冻结所有内容。在 WPF 中绘图非常非常慢。

那么您应该使用 DrawingVisual Class

DrawingVisual 是一种轻量级绘图 class,用于渲染形状、图像或文本。这个 class 被认为是轻量级的,因为它不提供布局、输入、焦点或事件处理,从而提高了它的性能。因此,绘画是背景和剪贴画的理想选择。