Пользовательский SolidColorBrush слишком медленный при рисовании прямоугольников в WPF/C#

Следующий код эффективно создает 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 ответ

Решение

Вам нужно Freeze кисть перед использованием, чтобы улучшить производительность. добавлять

myBlueBrush.Freeze();

после InitializeComponent(); в конструкторе userControl.

Brushes класс замораживает свои кисти после их инициализации. см. исходный код KnownColors.SolidColorBrushFromUint

Другие вопросы по тегам