以下代码有效地创建了一个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
?
谢谢
答案 0 :(得分:2)
您需要先Freeze
刷才能使用它来提高性能。添加
myBlueBrush.Freeze();
userControl构造函数中InitializeComponent();
之后。
Brushes
类在初始化画笔后将其冻结。参见source code of KnownColors.SolidColorBrushFromUint