C#关于内存不足的困惑

时间:2014-01-07 15:19:54

标签: c# memory-management out-of-memory

我一直在阅读有关内存不足的内容已经有一段时间了,我发现在大多数情况下,内存不足异常(至少在.NET中)实际上并不是因为系统实际耗尽内存而是系统可能由于碎片,不分配请求的内存块的块。

我真正理解的是,即使我尝试在应用程序启动时分配大量连续内存(例如:加载100张图像),我仍处于内存不足的情况。由于应用程序刚刚启动,因此假设在此之前没有进行太多的分配/解除分配,因此应该有许多可用的空闲连续块。在那种情况下,为什么应用程序仍会受到内存碎片问题的影响?

请注意,我也非常确定该问题不是由系统实际耗尽为我的应用程序分配的内存配额引起的,因为在我的特定情况下加载100个图像只需要大约200 MB左右。

1 个答案:

答案 0 :(得分:0)

根据我的经验,Out of Memory主要意味着糟糕的对象管理。过快地创建太多对象并且GC很难跟上它的症状很明显。通过缓存和明确定义的对象生命周期,可以防止少数项目占用并且永远不会使内存恢复(如SQL Server)内存。