一段时间以来,我一直在阅读有关内存不足的信息,我发现在大多数情况下,内存不足异常(至少在 .NET 中)并不是真正由系统实际内存不足引起的,而是系统可能由于碎片,不分配请求的内存块 block 。
我不太明白的是,即使我尝试在应用程序启动时分配一大块连续内存(例如:加载 100 张图像),我仍然遇到内存不足异常的情况。由于应用程序刚刚启动,假设在此之前没有进行多少分配/取消分配,因此应该有许多空闲的连续 block 可用。在那种情况下,为什么应用程序仍然会受到内存碎片问题的影响?
请注意,我也相当确定问题不是由系统实际用完为我的应用程序分配的内存配额引起的,因为在我的特定情况下加载 100 张图像只需要 ~200 MB 左右。
最佳答案
根据我的经验,内存不足主要意味着对象管理不善。这是创建太多对象太快的症状,GC 很难跟上。抛开少数占用内存但从不归还内存的项目(如 SQL Server)可以通过缓存和定义明确的对象生命周期来防止内存不足。
关于C#内存不足的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975295/