【问题标题】:C# Confusion about out of memoryC#关于内存不足的困惑
【发布时间】:2014-01-07 15:19:54
【问题描述】:

我一直在阅读有关内存不足的信息,我发现在大多数情况下内存不足异常(至少在 .NET 中)并不是真正由系统实际内存不足引起的,而是系统可能由于碎片,不分配请求的内存块块。

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

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

【问题讨论】:

  • 你能发布代码示例吗?
  • 既然你提到了图片,你用的是System.Drawing吗? GDI+ 喜欢为与内存无关的事物返回 OOM 错误代码,例如超出范围的参数。 System.Drawing 然后将该错误代码映射到 OOM 异常。

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


【解决方案1】:

根据我的经验,内存不足主要意味着对象管理不善。它是创建太多对象太快的症状,而 GC 很难跟上。通过缓存和明确定义的对象生命周期,可以防止少数几个占用内存且从不回收内存的项目(如 SQL Server)内存不足。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2017-11-22
    • 1970-01-01
    • 2013-07-23
    • 2019-05-17
    相关资源
    最近更新 更多