虚拟化后渲染线程仍然很慢

时间:2011-09-12 12:56:25

标签: wpf performance listbox rendering virtualization

在高级别,我的应用程序根据其类型将大约5个不同的DataTemplates应用于一组ListBoxItems。这些项目布置在特定x,y点的画布上。我在ListBox上实现了虚拟化,它似乎没有改善完成渲染线程进程所需的时间。用户完全加载和使用UI仍需要大约8-12秒。我认为虚拟化可以帮助解决这个问题,但在环顾四周之后看起来它只会帮助处理滚动大量数据。我是否在这个假设中是正确的,并且其他任何人都有其他改进渲染线程的技巧。这是我遇到的唯一问题,然后我的项目就完成了。谢谢StackOverflow!

3 个答案:

答案 0 :(得分:1)

虚拟化意味着只创建您可见的项目,然后在滚动时动态销毁/创建新项目。另一种方法是同时为所有项目创建所有UI控件。

听起来你应用程序的其余部分存在更大的问题。您是否在后台线程上执行所有加载操作? UI控件树确实非常复杂吗?您正在展示100件或1,000件商品吗?

答案 1 :(得分:1)

我们在WPF中的性能也遇到了很多麻烦。最好的方法当然是分析您的应用程序。我们使用ANTS Performance Profiler,但任何.NET Profiler都可以。由于查找了我们的XAML资源,我们获得了巨大的性能提升。多数民众赞成我可以给你的建议: 尽量减少XAML中的所有资源。但不仅如此,还要尽量减少您拥有的XAML文件的数量。您可以尝试的一件事是提取DataTemplate复杂部分的加载。与在浏览器中加载JPEG时会发生的情况类似,首先您会看到一个像素化的图像,它在加载JPEG后会更精细。要实现这一点,首先使用更简单的DataTemplate然后如果这是可见的,只需按需加载复杂模板或一段时间后加载复杂模板。 但是如果没有关于您具体问题的更多信息,我们只能猜测。 This关于一个类似的主题是我的一个老问题,也许这也会有所帮助。

答案 2 :(得分:0)

是的,ListBox虚拟化用于滚动。当ListBox中有大量项目时,启用虚拟化将只显示可见项目(+一些额外的滚动项目),滚动ListBox会替换渲染项目中的数据,而不是渲染新项目。“ p>

如果您要发布一些代码,也许我们可以帮助您进行一些性能调整