我正在使用StackPanel垂直布置多个控件(例如标题,子标题,列表框,分隔符,列表框等)。StackPanel是ScrollViewer的子级,以确保其内容始终可滚动。StackPanel中的控件之一是ListBox。它的ItemsSource数据绑定到一个巨大的集合,并使用复杂的DataTemplate来实现每个项目。不幸的是,这导致了非常差的性能(高CPU/内存)。我尝试将ListBox的ItemsPanel设置为VirtualizingStackPanel,并覆盖其ControlTemplate仅使用ItemsPresenter(删除ListBox的ScrollViewer),但是性能没有任何改进。我猜测StackPanel在测量期间会给其内部子元素提供无限高度?当我用其他面板/布局(例如Grid,DockPanel)替换ScrollViewer和StackPanel时,性能显着提高,这表明瓶颈以及解决方案都在虚拟化中。是否有任何方法可以改善此视图的CPU/内存性能?
[更新1]
原始样例项目:http://s000.tinyupload.com/index.php?file_id=29810707815310047536
[更新2]
我尝试重新设计/模板化TreeView/TreeViewItems来得到以下示例。它仍然需要很长时间才能启动/相同,内存使用率很高。但一旦加载完成,滚动感觉比原始示例更具响应性。
想知道是否有其他方法进一步改善启动时间/内存使用情况?
重新设计的TreeView项目:http://s000.tinyupload.com/index.php?file_id=00117351345725628185
[更新2]
pushpraj的解决方案非常好。
- 原始数据:
- 启动时间:35秒
- 内存占用:393MB
- 滚动:缓慢
- 树形视图:
- 启动时间:18秒
- 内存占用:377MB
- 滚动:快速
- pushpraj的解决方案:
- 启动时间:<1秒
- 内存占用:20MB
- 滚动:快速