我使用DebugDiag 1.2和perfmon.exe来监视.NET应用程序的内存使用情况。
DebugDiag将GC Heap Size
显示为35.51 MB,而对于同一时刻,perfmon将#Bytes in all heaps
显示为4.5 MB。
为什么两个值都不同?他们不代表同样的事情吗?
答案 0 :(得分:2)
“所有堆中的字节数”表示应用程序当前正在使用的所有.NET对象使用的内存,其中GC堆大小实际上是.NET堆中提交的内存。 GC堆大小更大的原因是因为它包含标记为“ FREE ”的对象使用的内存。 .NET不会立即将所有标记为FREE的内存返回给操作系统并在下一个垃圾收集中释放,以便内存仍然标记为提交,并且仍然在.net堆中,但实际上并没有被任何东西使用在申请中。
要更加了解这一点,请浏览http://blogs.msdn.com/b/tess/archive/2005/11/25/496973.aspx并在该博客中搜索免费一词