.NET应用程序的内存消耗详细信息

时间:2009-02-17 12:52:52

标签: .net memory perfmon

我正在调试与我们拥有的托管应用程序相关的一些内存问题。当我对所有堆中的.NET字节与Process Explorer中报告的工作集(在任务管理器的情况下为Mem Usage列)之间的内存差异感到困惑时,我正在使用perfmon监视应用程序。所有堆计数器中的字节值显示为15MB,而过程工作集为78MB - 这是一个巨大的差异。我知道在内存中加载的文件中会消耗一些内存,但数字仍然没有加起来。

任何线索?

3 个答案:

答案 0 :(得分:1)

这个article很好地概述了各种内存计数器。

  

工作集 - 这是一组虚拟内存页面(即   承诺)为一个过程而且是   位于物理RAM中。一个工作   set就像是“目前/最近   在这些页面上工作“列表

从您的问题描述中,您似乎有约。正在使用63MB的非托管内存。

答案 1 :(得分:1)

尝试并开始使用FXCop。查看有关未在IDisposable类型上调用dispose的规则。

.net中存在内存泄漏的两个主要原因,即无法调用IDisposable(这是一种将为P / Invoke代码调用非托管析构函数的技术),第二种是无法释放对象的引用,这导致他们不垃圾收集。例如,如果要将对象存储在列表中,则可能会意外地保留对列表的引用,从而保留对象仍然在内存中。

答案 2 :(得分:1)

Rico Mariani的Performance Tidbits博客文章Tracking down managed memory leaks (how to find a GC leak)并未直接回答您的问题:所有堆中的字节和工作集,但它应该对您的任务有很大帮助:调试与托管应用程序相关的一些内存问题

您可能还想查看Two things to avoid for better memory usageThree techniques for tracking down memory leaks due to undisposed objects

所有文章都很陈旧,但所提供的信息仍然对您有所帮助。