Пользовательский 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