我的WPF项目有一个tabcontrol,它承载多个数据网格控件。每个datagrid包含大约1000行,并且用户应该同时打开10个以上的datagrids(每个都在不同的tabpages中托管)。
问题是由于内存不足异常,我的应用程序会在第5到第6个数据网格崩溃。经过数小时的研究,我发现解决此问题的唯一可行方法是启用UI虚拟化。但是这不是一个选项,因为我需要平滑滚动数据网格,启用UI虚拟化将禁用平滑滚动。
另一个解决方案是将scrollunit更改为像素而不是基于项目。但是,在我的情况下,这也不是一个选项,因为我被限制在.NET Framework 4.0中运行该应用程序(该功能仅在4.5中可用)。
另外我很确定这是导致内存问题的行,因为如果我在没有数据网格的情况下运行应用程序,我可以轻松加载最多100s的视图模型。
我在想的是,我是否可以临时处理在不可见的标签页中创建的控件,并且只有在用户导航到相应的标签页时才创建它们?还有其他方法来解决这个问题吗?
答案 0 :(得分:0)
不使用数据网格会有所帮助。
虽然这些控件可以方便使用,但事实上它们远非轻量级。
屏幕将同时保存~30行,因此不需要污染内存数千个,为某些数据集加载更多行可以平滑滚动,因为您将使用预先获取的数据为网格提供数据,
如果数据不断变化,您甚至可以在临时文件中创建脱机缓存。