wpf - DrawingContext.DrawLine性能问题

标签 wpf

我正在尝试从控件的左边缘到右边缘绘制图形的不同策略。到目前为止,我们一直在使用具有折线的“ Canvas ”,该折线执行的很好,但仍然可以进行一些改进。

当我尝试使用DrawingContext.DrawLine时,我的表现令人难以置信的糟糕,我不知道为什么。这是我可以提出的最简洁的代码,它说明了这个问题:

public class TestControl : Control {

    static Pen pen = new Pen(Brushes.Gray, 1.0);
    static Random rnd = new Random();

    protected override void OnRender(DrawingContext drawingContext) {

        var previousPoint = new Point(0, 0);

        for (int x = 4; x < this.ActualWidth; x += 4) {
            var newPoint = new Point(x, rnd.Next((int)this.ActualHeight));
            drawingContext.DrawLine(pen, previousPoint, newPoint);
            previousPoint = newPoint;
        }
    }
}

而且MainWindow.xaml仅包含以下内容:
<StackPanel>
    <l:TestControl Height="16"/>
    <!-- copy+paste the above line a few times -->
</StackPanel>

现在调整窗口大小:根据StackPanel中TestControl的数量,我会遇到明显的延迟(10个控件)或30秒钟的总静止状态(100个控件),我什至无法点击“Stop Debugger”按钮在VS中

我对此很困惑,显然我做错了事,但是由于代码是如此简单,所以我不知道那是什么。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我正在使用.Net4,以防万一。

最佳答案

您可以通过卡住笔来获得性能。

static TestControl()
{
    pen.Freeze();
}

关于wpf - DrawingContext.DrawLine性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937364/

相关文章:

c# - 如何在1秒钟内调用函数200次

wpf - 在Microsoft Surface平台上使用WPF扩展器控件

c# - 如何为子属性在 Style、Setter 和 HierarchicalDataTemplate 上设置 DataContext 绑定(bind)?

WPF:将ImageSource转换为流

c# - WPF-MVVM-如何实现类似于附件图像的结构

c# - WPF 设计器无法加载

c# - 如何在ItemsControl中显示弹出窗口

c# - 同一个 ResourceDictionary 的多个实例

jquery - WPF/XAML 有类似 jquery 的东西吗?

wpf - 用矩形填充面板