首先,我知道这个问题已在本论坛多次讨论过,例如 Large array C# OutOfMemoryException和 OutOfMemoryException
我遇到问题的对象是
Dictionary<long, Double> results
将ID存储在long中,计算结果存储在Double
中我将不得不重复使用相同的对象大约10~20次,每当我重用它时我会称之为
results = new Dictionary<long, Double>
我知道我可以将它写入文本文件或数据库文件以进行进一步处理,但如果可能的话,我会尽量避免这种情况,因为它对我处理的数据量来说太慢了。我也试过GC.Collect(),但没有运气。
任何有过一些经验的人都可以给出一些指针吗?
编辑:我有&gt;列表中有300万个对象,但它们是固定的(即密钥在所有迭代中都是相同的)
答案 0 :(得分:1)
啊 - 不。在你的电话中使内存异常变得没什么意义。
我强烈建议你认真分析 - 将内存分析器放到程序中并找到真正的问题。一个长/双组合没有任何意义,除非你存储了几亿对,即便如此....
并且:对64位的moe总是明智的。由于GC“开销”,每个进程的2/3 gb限制在.net上更难 - 不可能耗尽所有内存。 64位具有更高的限制。
但同样,你的指示是错误的。新词典可能不是错误,其他东西浪费你的记忆。
答案 1 :(得分:1)
如果问题只是内存没有按预期释放;也许如果你在字典上使用“.Clear()”而不是每次都重新创建?
答案 2 :(得分:0)
不是创建20个不同的实例,而是使用一个,但清除列表(允许GC收集旧元素),以便您有更多的内存可供使用。此外,如果您需要大量内存,那么迁移到64位环境可能是明智的。