WPF多个数据网格导致内存问题

时间:2014-01-02 02:06:02

标签: c# wpf datagrid memory-leaks

我的WPF项目有一个tabcontrol,它承载多个数据网格控件。每个datagrid包含大约1000行,并且用户应该同时打开10个以上的datagrids(每个都在不同的tabpages中托管)。

问题是由于内存不足异常,我的应用程序会在第5到第6个数据网格崩溃。经过数小时的研究,我发现解决此问题的唯一可行方法是启用UI虚拟化。但是这不是一个选项,因为我需要平滑滚动数据网格,启用UI虚拟化将禁用平滑滚动。

另一个解决方案是将scrollunit更改为像素而不是基于项目。但是,在我的情况下,这也不是一个选项,因为我被限制在.NET Framework 4.0中运行该应用程序(该功能仅在4.5中可用)。

另外我很确定这是导致内存问题的行,因为如果我在没有数据网格的情况下运行应用程序,我可以轻松加载最多100s的视图模型。

我在想的是,我是否可以临时处理在不可见的标签页中创建的控件,并且只有在用户导航到相应的标签页时才创建它们?还有其他方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

不使用数据网格会有所帮助。

虽然这些控件可以方便使用,但事实上它们远非轻量级。

屏幕将同时保存~30行,因此不需要污染内存数千个,为某些数据集加载更多行可以平滑滚动,因为您将使用预先获取的数据为网格提供数据,

如果数据不断变化,您甚至可以在临时文件中创建脱机缓存。