WPF Canvas中成千上万个矩形的速度(有一个笔画!!!)

时间:2013-04-06 14:07:30

标签: wpf performance canvas treemap stroke

这是我的第一个问题,

但我没有找到真正的答案。

我从事可视化程序并使用C#和WPF。

我需要绘制一个树形图。我实际创建了Rectangle对象,然后将它们添加到Canvas中,它非常好用,因为我还为这些矩形添加了事件处理程序(鼠标单击)。

我的性能有问题。 当我添加矩形并设置Stroke属性(SolidColorBrush)时,整个过程非常缓慢。如果没有设置这些笔画,速度就可以了。

我已经通过将Rectangle对象添加到新创建的Canvas对象然后将这个新的Canvas对象添加到原始Canvas对象中来改善性能(因此并非所有矩形都是原始Canvas的直接子项,这应该有助于加快速度向上)。

所以我的问题是如何在不破坏速度的情况下为所有这些矩形添加笔划。

您可以在链接中找到“无笔划”和“描边”树形图版本的比较。

Treemap without Strokes

Treemap with Strokes

非常感谢你的帮助!

修改

好的,我找到了解决方案!

很抱歉先在这里写,但我已经搜索了几个小时才找到解决方案,但现在我发现问题是我用过的SolidColorBrush!

我有这样的事情:

public static SolidColorBrush TreeMapBorderBrush;

我使用这个Brush来设置应该添加到Canvas的每个Rectangle的Stroke属性。但究竟就是问题所在。

代码之前看起来像这样:

rect.Stroke = Visualization_Helper.TreeMapBorderBrush;

我现在把它改成了这个:

rect.Stroke = Visualization_Helper.TreeMapBorderBrush.Clone();

所以我现在只在每个Rectangle上使用该Brush的副本,这样可以加速处理,就像没有Stroke一样(就像在我的问题中一样)!

仅供参考!怪异!

0 个答案:

没有答案