wpf:usercontrol与customcontrol性能问题

时间:2010-03-25 17:12:09

标签: c# wpf treeview user-controls datatemplate

从性能视图用户控件或自定义控件中哪一个更好? 现在我正在使用用户控件,在一个特定的场景中,我正在创建这个控件的大约200个(大约)个不同的实例,但是在加载时它有点慢,我需要等待最后20-30秒才能完成操作。我该怎么做才能提高性能?

编辑:

情景是: 在我的Window中,我有一个TreeView,它的每个项代表不同的用户定义类型,所以我为每种类型定义了DataTemplate。这些DataTemplates正在使用用户控件,这些用户控件与用户定义类型的属性绑定在一起。简单来说,TreeView映射了用户定义类型的分层数据结构。现在我从Xml读取并创建Heirarchical结构并将其分配给TreeView,并且需要花费大量时间来加载。有什么帮助吗?

5 个答案:

答案 0 :(得分:3)

我有一个应用程序正在加载大约500个小控件。我们最初构建这些作为用户控件,但加载baml似乎导致控件加载缓慢(每个都非常快,但是当我们大约300时,它们的总数似乎加起来)。用户控件似乎也消耗了大量内存。我们将它们切换到自定义控件,应用程序启动几乎快两倍,占用了大约1/3的内存。不是说这种情况总是如此,但自定义控件对我们来说有很大的不同。

答案 1 :(得分:2)

仅供参考:以下是使用带有TreeView的VirtualizingPanel的链接:http://msdn.microsoft.com/en-us/library/cc716882.aspx

答案 2 :(得分:0)

在添加控件时确保SuspendLayout。尝试在将控件添加到任何容器之前完全配置控件。

答案 3 :(得分:0)

以下是WPF虚拟化堆栈面板和TreeView问题的后续文章。我希望这会对你有所帮助。

http://lucisferre.net/2010/04/21/virtualizing-stack-panel-wpf-part-duex/

长话短说:可以使用当前的VSP进行导航,但这有点像黑客攻击。当前的VSP设计需要返工,因为它当前虚拟化View的方式打破了View和ViewModel之间的耦合,这反过来打破了MVVM的整个概念。

答案 4 :(得分:0)

我在Microsoft工作,因为性能不佳而不允许使用UserControl。我们总是在C#中创建控件。不确定DataTemplates的性能,但我有兴趣知道它是否更好。我怀疑它是。