【问题标题】:Large object heap and IDisposable [duplicate]大对象堆和 IDisposable [重复]
【发布时间】:2018-03-15 15:41:48
【问题描述】:

我正在使用 .Net 4.0,我需要在我的程序工作期间创建大量图像。据我了解存储在 LOH 中的图像。 LOH 中的 Image.Dispose() 方法是否释放内存?我尝试使用分析器,我看到 GC 清理了很多 SOH,但应用程序的内存使用量仍然增加。并且只有在我调用时才会释放所有内存

GC.Collect(); 
GC.WaitForPendingFinalizers();

所以看起来图像的 dispose 方法不会释放 LOH 内存。

【问题讨论】:

  • IDisposable 几乎没有(至少直接地)与 GC 有关系,所以基本上:没有。另请注意,GC 甚至不会尝试无缘无故地主动将内存交还给操作系统。是什么让您认为有问题?
  • @MarcGravell 我对我的应用程序进行了一些压力测试,我发现在此测试期间内存使用量增加了。分析一无所获,因为当我做快照时所有内存都会释放。所以我认为,我的图像存在存储在 LOH 中的问题。这会导致内存不足异常

标签: c# .net


【解决方案1】:

IDisposable 是一种管理非托管资源(非托管内存或其他东西,如文件句柄)生命周期的机制。 LOH 用于托管内存。所以是的,调用Dispose 很可能对您的托管堆使用没有任何作用,因为这两件事没有任何共同之处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2011-12-20
    • 2010-10-10
    • 1970-01-01
    • 2012-09-23
    • 2016-02-04
    相关资源
    最近更新 更多