理解应用程序内存使用

时间:2014-11-17 01:47:23

标签: .net memory-management garbage-collection performancecounter

我的应用程序显示了不同性能计数器的以下值。

enter image description here

我有两个问题。

  1. 我认为所有堆中的字节数代表.net内存使用量 所有堆积。如果这是正确的,那应该等于堆大小 Gen 0,1,2和大对象堆,这不是这种情况。

  2. 保留字节表示.net使用的可用内存 满足下一个分配要求。在那种情况下不应该保留 bytes总是大于提交的字节,而不是这种情况 这里。

  3. 有人可以解释我在这里误解了什么吗?

1 个答案:

答案 0 :(得分:1)

问题1

根据Microsoft documentation

  

Gen 0显示生成时可分配的最大字节数   0;它不表示当前分配的字节数   第0代。

因此#Bytes in all Heaps等于Gen 1 heap sizeGen 2 heap sizeLarge Object heap size。你可以做数学。

问题2

再次引用Microsoft documentation

  

虚拟内存可以处于三种状态:

     
      
  • 免。内存块没有引用它,可以分配。

  •   
  • 保留。内存块可供您使用,不能用于任何其他分配请求。但是,你不能存储   数据到此内存块,直到它被提交。

  •   
  • 所犯。内存块分配给物理存储。

  •   

因此# Total committed Bytes是当前使用的内存总量,# Total reserved Bytes是尚未提交(物理存储)的内存保留。

我理解这一点的方法是为您准备好保留字节,但物理存储尚未准备好接收您的数据。