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

时间:2011-09-02 20:20:19

标签: wpf datagrid scrollviewer ui-virtualization

我们遇到了滚动WPF数据网格的问题。通过一些分析发现ScrollViewer.CanContentScroll = true是罪魁祸首。删除并使其成为错误,滚动问题已得到修复。但昨天我正在分析由于错误地绑定了50k记录而导致WPF应用程序内存占用增加超过1.3Gb的错误。它仍然质疑绑定甚至10k记录的能力。用户不想要分页。 (这是一个要求,不能做很多事情!)

在进一步的读者发现设置ScrollViewer.CanContentScroll = false使UI虚拟化失败。这使得WPF绑定所有记录并在屏幕上呈现它。这会导致内存占用空间爆炸和性能问题。

现在我们想如果要绑定的记录是最小的,那么设置ScrollViewer.CanContentScroll = false,否则将其设置为true。

简而言之:我们要么遇到滚动问题,要么陷入UI虚拟化。有什么东西能解决这两个问题吗?已阅读有关数据虚拟化的内容,但我们真的需要走得那么远吗?我错过了.net4.0开箱即用的东西,可以帮助我们吗?

1 个答案:

答案 0 :(得分:2)

如果您查看this question的已接受答案...在答案的“在他们之间选择”部分,有一个建议的提示,用于将自定义装饰器的可见性设置为隐藏在视野中。

但除此之外......你是对的。您可以获得平滑滚动或虚拟化......不是两者兼而有之。

此外,如果您对数据网格中的项目进行分组,请查看this answer我发布了一段时间以便于提高性能。