我正在使用C#并且在读取50,000条记录后出现了System.OutOfMemoryException错误,处理此类大型数据集的最佳做法是什么?分页会有帮助吗?
答案 0 :(得分:4)
我可能会建议创建MDB文件并使用DataReader将记录流式传输到MDB,而不是尝试在本地读入和缓存整个数据集。使用DataReader,该过程更加手动,但您一次只能获得一条记录,因此您将无法填满记忆。
答案 1 :(得分:2)
你仍然不应该立即阅读所有内容。读入块,然后将块写入mdb文件,然后读取另一个块并将其添加到文件中。一次读取50,000条记录只是在惹麻烦。
答案 2 :(得分:1)
显然,在创建MDB文件之前,您无法读取内存中的所有数据,否则您将无法获得内存不足异常。 :-)
您有两种选择: - 分区 - 使用过滤以较小的块读取数据 - 虚拟化 - 在页面中拆分数据并仅加载当前页面
在任何情况下,您都必须创建MDB文件,然后以块的形式传输数据。
答案 3 :(得分:0)
如果你正在使用xml,那么只需要阅读几个节点。如果您正在使用其他格式,请一次只读几行(或其他)。在开始处理之前,请不要将整个内容加载到内存中。
答案 4 :(得分:0)
我建议使用generator:
“...而不是构建一个包含所有值并一次返回所有值的数组,生成器一次生成一个值,这需要更少的内存,并允许调用者立即开始处理前几个值简而言之,生成器看起来像一个函数,但行为类似于迭代器。“
维基百科文章也很少good examples