OutOfMemoryException—克服此问题的策略

本文关键字:策略 问题 克服 OutOfMemoryException | 更新日期: 2023-09-27 18:04:38

首先,我知道这个问题在这个论坛里已经讨论过很多次了,比如c# OutOfMemoryException和OutOfMemoryException

我遇到问题的对象是

Dictionary<long, Double> results

将ID存储为long,计算结果为Double

我将不得不重复使用同一个对象大约10~20次,每次当我重复使用它时,我都会调用

results = new Dictionary<long, Double>

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

有经验的人能给点指点吗?

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

OutOfMemoryException—克服此问题的策略

不。在调用中使用内存异常也没有什么意义。

我强烈建议你认真分析——给程序安装一个内存分析器,找出真正的问题。长/双组合没有任何意义,除非您存储数亿对组合,即使如此....

和:移动到64位总是明智的。由于GC的"开销"——不可能用尽所有的内存,每个进程2/3gb的限制在。net上更加困难。64位有更高的限制。

但是,你的指示又错了。新字典可能根本不是错误,是其他东西在浪费你的内存。

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

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