.NET CLR 内存“所有堆中的字节数”远低于“Gen 0 堆大小”

Posted

技术标签:

【中文标题】.NET CLR 内存“所有堆中的字节数”远低于“Gen 0 堆大小”【英文标题】:.NET CLR Memory "Bytes in all heaps" is much lower than "Gen 0 heap size" 【发布时间】:2012-04-19 21:05:02 【问题描述】:

我正在查看 ASP.NET 4 应用程序(工作流服务)的性能计数器

.NET CLR Memory -- # Bytes in all Heaps :    44,420,488
.NET CLR Memory -- Gen 0 heap size :        311,665,568
.NET CLR Memory -- Gen 1 heap size :         17,723,080
.NET CLR Memory -- Gen 2 heap size :         25,956,920
.NET CLR Memory -- Large Object Heap size :     740,488

关于“# Bytes in all Heaps”计数器的说明

这个计数器是其他四个计数器的总和;第 0 代堆大小;第 1 代堆大小; Gen 2 堆大小和大对象堆大小。此计数器指示 GC 堆上以字节为单位分配的当前内存。

请注意,它说的是“四个其他计数器的总和”,而不仅仅是“分配在四个其他堆上的字节总和”,这是有道理的,因为在 Gen 0 垃圾回收后 Gen 0 堆中有 0 个字节。

我注意到在我的情况下,所有堆中的#Bytes 恰好是 Gen 1 + Gen 2 + Large Object Heap。这是一个错误吗?还是我错过了阅读数字?

Windows 7 企业版,性能监视器 6.1.7601

【问题讨论】:

【参考方案1】:

根据this,所有堆 = Gen 1 + Gen 2 + 大对象堆 (没有第 0 代)

【讨论】:

@THX-1138 另请注意,“Gen 0 堆大小”不是 Gen 0 堆的当前“占用”,而是当前 最大 大小 - 它始终是预分配的,无论实际有多少对象。所以性能计数器并不是那么有用:)

以上是关于.NET CLR 内存“所有堆中的字节数”远低于“Gen 0 堆大小”的主要内容,如果未能解决你的问题,请参考以下文章

为啥用USB拷文件的速度远低于理论值?

如何对正在运行的 ASP.NET 应用程序进行非侵入式分析?

c# 垃圾回收。 .NET CLR 内存性能计数器显示 0 代表 gen 0 堆大小等。这是啥意思?

.Net 7 内存模型函数描述结构MethoDesc

电脑出现CLR错误怎么办?

.Net 自动内存管理