2011-09-02 105 views
3

我们遇到了WPF数据网格的滚动问题。通过一些分析发现ScrollViewer.CanContentScroll = true是罪魁祸首。删除并使其失效,滚动问题得到修复。但昨天我分析了一个错误,即由于错误地绑定了5万条记录,WPF应用程序的内存占用量增加到超过1.3Gb。它仍然质疑即使是10k条记录的绑定能力。用户不想分页。 (它的一个要求,不能做太多的工作!)DataGrid滚动问题修复导致性能和内存问题

在进一步的读者发现设置ScrollViewer.CanContentScroll = false使UI虚拟化为假。这是使WPF绑定所有记录并将其呈现在屏幕上。这导致记忆足迹和性能问题爆发。

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

简而言之:我们要么停留在滚动问题或UI虚拟化上。有什么可以解决这两个问题吗?已阅读关于数据虚拟化的内容,但我们是否真的需要这么做?我是否可以从.net4.0中找到任何可以帮助我们的东西?

回答

2

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

但除此之外...你是对的。你要么顺利滚动,要么虚拟化...不是两个。

此外,如果你在你的数据网格中分组项目,检查出this answer我发布了一段时间,为了方便的性能改进。

+0

谢谢斯科特,我会尝试任何一个选项,并会在这里更新! – ioWint