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 被认为是轻量级的,因为它不提供布局、输入、焦点或事件处理,从而提高了它的性能。因此,绘画是背景和剪贴画的理想选择。
我需要在我的项目中绘制大约 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 被认为是轻量级的,因为它不提供布局、输入、焦点或事件处理,从而提高了它的性能。因此,绘画是背景和剪贴画的理想选择。