.net 了解应用程序内存使用情况
我的应用程序为不同的性能计数器显示以下值 我有两个问题.net 了解应用程序内存使用情况,.net,memory-management,garbage-collection,performancecounter,.net,Memory Management,Garbage Collection,Performancecounter,我的应用程序为不同的性能计数器显示以下值 我有两个问题 我认为所有堆中的字节数表示.net内存使用量 所有堆。如果这是正确的,那么应该等于的堆大小 第0代、第1代、第2代和大型对象堆(此处并非如此) Reserve bytes表示.net用于存储的可用内存 满足下一次分配要求。在这种情况下,我们不应该保留 字节始终大于提交的字节,但实际情况并非如此 在这里 有人能解释一下我在这里误解了什么吗?问题1 根据: Gen 0显示生成中可分配的最大字节数 0; 它不表示在中分配的当前字节数 第0代
有人能解释一下我在这里误解了什么吗?问题1 根据: Gen 0显示生成中可分配的最大字节数 0; 它不表示在中分配的当前字节数 第0代 因此,所有堆中的
#字节
等于Gen 1堆大小
、Gen 2堆大小
和大对象堆大小
。你可以做数学题
问题2
再次引用:
虚拟内存可以处于三种状态:
- 免费的。内存块没有对它的引用,可以进行分配
- 保留的。内存块可供您使用,不能用于任何其他分配请求。但是,您不能存储 将数据提交到此内存块,直到提交为止
- 承诺。内存块被分配给物理存储器
#提交的总字节数
是当前使用的内存总量,#保留的总字节数
是尚未提交(物理存储)的保留内存
我的理解是,保留字节已准备就绪,但物理存储尚未准备好接收数据 所有堆中提交的总字节数与#字节数之间是否存在任何关系?这两个不应该是一样的吗?这是另一个很好的问题。除了一个(堆)是另一个的子集之外,我想不出其他任何东西。我的猜测(有人可能会纠正我)是,两者之间的区别在于可用于新分配的内存。