.NET应用程序内存使用情况-未使用的.NET以及未托管的内存和碎片数量很高

标签 .net memory-management red-gate-ants memory-fragmentation

我正在使用ANTS内存探查器来诊断我的一个.NET 2.0应用程序中遇到的内存泄漏增加。
我在7.5个小时内为该过程拍摄了7张快照,以下是获得的数据的表格表示-

G1代表第1代大小,G2代表第2代大小。除了非托管空间和专用字节,其他所有值均以MB为单位。

我的问题是-

  • 即使堆大小很小,为什么还有这么高的未使用.NET空间?
  • 我的大对象堆最大为2 MB,在最后3个快照期间仍为96 KB。那么为什么会有这么高的大碎片,它们又造成了很大的未使用空间呢?
  • 非托管空间不断增加。这是否会导致专用字节数随时间增加?

  • 我竭尽全力解决了这个问题,并进行了多次分析,但找不到适当的解决方案。我准备提供所需的任何其他数据。

    最佳答案

    正如Alex所指出的那样,可以在这里找到关于问题类的大对象堆碎片的很好的解释:

    https://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/

    该问题在.NET FX开发团队中众所周知,并且一直在得到解决。
    使用最新的FX版本,症状很有可能消失。

    从.NET 4.5.1开始,将有一个GC方法调用甚至可以压缩LOH:
    http://blogs.msdn.com/b/mariohewardt/archive/2013/06/26/no-more-memory-fragmentation-on-the-large-object-heap.aspx
    但是,找到LOHF的根本原因要比仅仅清除浪费大量ms的堆的方法更为有效。

    让我知道,如果您需要更多详细信息如何隔离这种影响。

    塞布

    关于.NET应用程序内存使用情况-未使用的.NET以及未托管的内存和碎片数量很高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18607121/

    相关文章:

    c# - Silverlight 内存泄漏

    c# - 如何获取网址的内容类型?

    c# - 是否有任何 .NET ORM 支持开箱即用的本地化实体?

    c++ - 指向共享对象的指针数组

    c# - 在 ANTs 分析器信息的帮助下识别性能瓶颈

    testing - 如何关联 ANTS Memory Profiler 中的过滤器以查找内存泄漏?

    c# 反射 - 从 PropertyInfo 获取属性列表

    .net - 是什么决定了 WCF WSDL 中 XML 属性的顺序?

    c - Fopen 二进制文件失败

    c# - 未使用所有内存/限制时出现内存不足异常