DataGrid滚动问题修复导致性能和内存问题

3
我们在处理 WPF 数据表格的滚动时遇到了问题。经过一些分析,发现 ScrollViewer.CanContentScroll = true 是罪魁祸首。将其删除并设置为 false 后,滚动问题得以解决。但是昨天我在分析一个错误时发现,由于错误地绑定了 50k 条记录,WPF 应用程序的内存占用超过了 1.3GB。这仍然对绑定甚至 10k 条记录的能力提出了质疑。用户不想要分页。(这是一个要求,我们无法做太多!)
进一步阅读后发现,将 ScrollViewer.CanContentScroll 设置为 false 会使 UI 虚拟化失效。这会导致 WPF 绑定所有记录并在屏幕上呈现,从而导致内存占用和性能问题爆炸式增长。
目前,我们认为如果要绑定的记录很少,则将 ScrollViewer.CanContentScroll 设置为 false;否则将其设置为 true。
简而言之,我们要么陷入滚动问题,要么陷入 UI 虚拟化问题。有没有什么东西可以同时解决这两个问题?我已经了解了数据虚拟化,但我们真的需要走这么远吗?我是否错过了 .net4.0 中的某些开箱即用的功能可以帮助我们?
1个回答

2
如果您查看这个问题的已接受答案... 在回答的“它们之间的选择”部分中,建议在项目不可见时将自定义装饰器的可见性设置为隐藏。
但除此之外...你是对的,你要么获得平滑滚动,要么获得虚拟化...两者兼得是不可能的。
此外,如果您在datagrid中对项目进行分组,请查看我以前发布的这个答案,可以方便地提高性能。

谢谢Scott,我会尝试其中的一个选项并在这里更新! - ioWint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接