System.OutOfMemoryException在大型数据集上使用C#

时间:2008-10-07 22:50:54

标签: c# exception

我正在使用C#并且在读取50,000条记录后出现了System.OutOfMemoryException错误,处理此类大型数据集的最佳做法是什么?分页会有帮助吗?

5 个答案:

答案 0 :(得分:4)

我可能会建议创建MDB文件并使用DataReader将记录流式传输到MDB,而不是尝试在本地读入和缓存整个数据集。使用DataReader,该过程更加手动,但您一次只能获得一条记录,因此您将无法填满记忆。

答案 1 :(得分:2)

你仍然不应该立即阅读所有内容。读入块,然后将块写入mdb文件,然后读取另一个块并将其添加到文件中。一次读取50,000条记录只是在惹麻烦。

答案 2 :(得分:1)

显然,在创建MDB文件之前,您无法读取内存中的所有数据,否则您将无法获得内存不足异常。 :-)

您有两种选择:   - 分区 - 使用过滤以较小的块读取数据   - 虚拟化 - 在页面中拆分数据并仅加载当前页面

在任何情况下,您都必须创建MDB文件,然后以块的形式传输数据。

答案 3 :(得分:0)

如果你正在使用xml,那么只需要阅读几个节点。如果您正在使用其他格式,请一次只读几行(或其他)。在开始处理之前,请不要将整个内容加载到内存中。

答案 4 :(得分:0)

我建议使用generator

  

“...而不是构建一个包含所有值并一次返回所有值的数组,生成器一次生成一个值,这需要更少的内存,并允许调用者立即开始处理前几个值简而言之,生成器看起来像一个函数,但行为类似于迭代器。“

维基百科文章也很少good examples