5

我有一个 DataGrid,它有一个 DataTable 作为它的 ItemsSource。DataTable 包含 24 列和约 1600 行(实际上我稍后将不得不加载更多行,但现在这已经够麻烦了)。

尽管为活动的列和行设置了虚拟化,DataGrid 需要大约 30 秒才能显示这 1600 行。在那之后,垂直滚动效果很好,水平滚动很慢,尽管你会期望它反过来。

如果我运行内存分析器,我可以验证应用程序使用的大部分内存来自 DataGridCells、Borders、ContentPresenters 和 Textblocks。对我来说,这表明网格没有正确虚拟化它的行。

谁能确认 DataGrid 的虚拟化存在问题?还是在执行此控制时存在某种臭名昭著的陷阱?

期待任何类型的输入/建议。谢谢 :)

4

2 回答 2

5

我已经解决了这个问题。我的 DataGrid 位于 ScrollViewer 中,它会在其中无限延伸。所以它被愚弄以为一切都是可见的,这就是它不会虚拟化它的项目的原因。我删除了 ScrollViewer(无论如何,DataGrid 都有自己的滚动条),它现在可以完美运行。

于 2013-02-25T09:37:39.703 回答
2

嗯,好吧,我不知道为什么,但显然我必须添加一些胶水文本才能在这里发布答案。也许,这个SO 答案会对您有所帮助。

编辑

作为额外的建议,我想建议您考虑一下您的方法。真的有必要在 a 中添加 1.6k+ 个项目DataGrid吗?也许您应该考虑延迟加载。

于 2013-02-19T13:49:51.127 回答