在WPF / C#中绘制矩形时,自定义SolidColorBrush太慢

时间:2018-07-14 14:05:26

标签: c# wpf solidcolorbrush

以下代码有效地创建了一个2D矩形网格,我的问题是,当我使用自定义SolidColorBrush时,渲染会变得很慢。

public partial class CalculatorView : UserControl
{
    /// This is how I'm creating my custom brush
    Brush myBlueBrush = new SolidColorBrush(Color.FromArgb(255, 165, 211, 246));

    public CalculatorView()
    {
        InitializeComponent();
    }

    private void buttonCalculate_Click(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i < 100; i++) {
            for (int j = 0; j < 100; j++) {
                RectangleGeometry myRectangleGeometry = new RectangleGeometry();
                myRectangleGeometry.Rect = new Rect(((40 + 1) * i), ((40 + 1) * j), 40, 40);

                Path myPath = new Path();
                myPath.Fill = myBlueBrush; 
                myPath.StrokeThickness = 1;
                myPath.Data = myRectangleGeometry;
                CanvasSheet.Children.Add(myPath);
            }
        }
    }
}

如果我更改myPath.Fill = myBlueBrush;以使用本机画笔myPath.Fill = Brushes.Red;,则速度会大大提高。

如何在不牺牲速度的情况下使用自定义SolidColorBrush

谢谢

1 个答案:

答案 0 :(得分:2)

您需要先Freeze刷才能使用它来提高性能。添加

myBlueBrush.Freeze();

userControl构造函数中InitializeComponent();之后。

Brushes类在初始化画笔后将其冻结。参见source code of KnownColors.SolidColorBrushFromUint