DrawingVisuals主机和布局性能

时间:2011-02-02 17:24:58

标签: c# wpf performance drawing

我有一个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);
    }
}

所以,我将它放入Grid或Window.Content中,它可以非常快速地渲染项目(1秒)。 当我调整窗口大小时,矩形被重新排列并重新绘制(也在1秒内)。

但是当我将ComboBox与MyControl一起放入XAML时:

<Grid>
   <ComboBox/>
   <MyControl />
</Grid>

渲染重新排列减慢到5-10秒。

有人对此有任何想法吗? 提前谢谢。

P.S。您可以下载演示项目Here

1 个答案:

答案 0 :(得分:1)

好。我已经成功了。每个视觉效果都是打开/关闭它自己的DrawingContext,这花费了太多时间。当我更改visual的渲染代码以使用VisualHost的DrawingContext实例作为参数传递给OnRender方法时,再次渲染20000个viual需要1-2秒。所以一切都很好,即使我因为使用​​这种渲染算法而失去了命中测试能力。