OutOfMemoryException - 克服这个问题的策略?

时间:2011-08-07 10:17:11

标签: c# .net exception-handling out-of-memory

首先,我知道这个问题已在本论坛多次讨论过,例如 Large array C# OutOfMemoryExceptionOutOfMemoryException

我遇到问题的对象是

Dictionary<long, Double> results

将ID存储在long中,计算结果存储在Double

我将不得不重复使用相同的对象大约10~20次,每当我重用它时我会称之为

results = new Dictionary<long, Double>

我知道我可以将它写入文本文件或数据库文件以进行进一步处理,但如果可能的话,我会尽量避免这种情况,因为它对我处理的数据量来说太慢了。我也试过GC.Collect(),但没有运气。

任何有过一些经验的人都可以给出一些指针吗?

编辑:我有&gt;列表中有300万个对象,但它们是固定的(即密钥在所有迭代中都是相同的)

3 个答案:

答案 0 :(得分:1)

啊 - 不。在你的电话中使内存异常变得没什么意义。

我强烈建议你认真分析 - 将内存分析器放到程序中并找到真正的问题。一个长/双组合没有任何意义,除非你存储了几亿对,即便如此....

并且:对64位的moe总是明智的。由于GC“开销”,每个进程的2/3 gb限制在.ne​​t上更难 - 不可能耗尽所有内存。 64位具有更高的限制。

但同样,你的指示是错误的。新词典可能不是错误,其他东西浪费你的记忆。

答案 1 :(得分:1)

如果问题只是内存没有按预期释放;也许如果你在字典上使用“.Clear()”而不是每次都重新创建?

答案 2 :(得分:0)

不是创建20个不同的实例,而是使用一个,但清除列表(允许GC收集旧元素),以便您有更多的内存可供使用。此外,如果您需要大量内存,那么迁移到64位环境可能是明智的。