我有一个WPF (.NET 3.5)控件,可以渲染大约20000个矩形。此MyControl是从Canvas派生的。我在孩提时代将一个MyVisualsHost放入MyControl,如下所示:
public class MyControl : Canvas
{
private readonly MyVisualsHost host = new MyVisualsHost();
private List<MyVisual> items = Enumerable.Range(0, 20000).Select(...).ToList();
public MyControl()
{
this.Children.Add(host);
}
}所以,我把它放到网格或Window.Content中,它渲染项目的速度相当快(1秒)。当我调整窗口大小时,矩形被重新排列和重新绘制(也是在1秒内)。
但是当我把ComboBox和MyControl放到XAML中时:
<Grid>
<ComboBox/>
<MyControl />
</Grid>在重排时渲染会减慢到5-10秒。
有人知道这一点吗?提前谢谢。
附注:您可以下载演示项目Here
发布于 2011-02-05 05:17:16
好吧。我已经做到了。每个视图都在打开/关闭它自己的DrawingContext,这花费了太多的时间。当我更改可视化渲染的代码以使用作为参数传递给OnRender方法的VisualHost的DrawingContext实例时,再次渲染20000个viuals花费了1-2秒的时间。所以现在一切都很好,尽管我因为使用这样的渲染算法而失去了命中测试的能力。
https://stackoverflow.com/questions/4877645
复制相似问题