缓存UserControl对象

时间:2012-01-10 14:07:57

标签: wpf performance caching

我有一个WPF应用程序,我在其中显示和隐藏许多UserControl对象。 XAML代码如下所示:

<ItemsControl ItemsSource="{Binding Path=MyListOfStuff}" >
    <Controls:MyControl Stuff="{Binding}"/>
</ItemsControl>

创建这些对象需要花费大量时间。分析显示'InitializeComponent'占用了MyControl对象的大量时间。我想预先创建这些对象以减少时间。我怎样才能做到这一点?我仍然需要xaml代码,并且不想用代码替换所有代码。

无法使用虚拟化,因为列表中的项有时会大于视图,因此CanContentScroll必须为False。

2 个答案:

答案 0 :(得分:1)

有两个方面可以解决您的问题。即使你可以同时使用它们..

  1. UI虚拟化
  2. 数据虚拟化
  3. 你应该看看

    http://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/10/01/ui-virtualization-vs-data-virtualization-part-2.aspx

    如果你使用.net 4.0,你可以使用Lazy类轻松支持Data Virtualization,否则你将不得不创建一些类来支持它。

    问候。

答案 1 :(得分:1)

可以在WPF中进行UI缓存,但我很确定它不是你想要的。

当一个视觉被多次绘制时,位图缓存非常有用,因此它只渲染一次,后续渲染仅从缓存中复制。

你必须看一下虚拟化(参见Shoaib的回答)。

Article about bitmap caching