Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 了解应用程序内存使用情况_.net_Memory Management_Garbage Collection_Performancecounter - Fatal编程技术网

.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代

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

我有两个问题

  • 我认为所有堆中的字节数表示.net内存使用量 所有堆。如果这是正确的,那么应该等于的堆大小 第0代、第1代、第2代和大型对象堆(此处并非如此)

  • Reserve bytes表示.net用于存储的可用内存 满足下一次分配要求。在这种情况下,我们不应该保留 字节始终大于提交的字节,但实际情况并非如此 在这里


  • 有人能解释一下我在这里误解了什么吗?

    问题1

    根据:

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

    因此,所有堆中的
    #字节
    等于
    Gen 1堆大小
    Gen 2堆大小
    大对象堆大小
    。你可以做数学题

    问题2

    再次引用:

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

    • 免费的。内存块没有对它的引用,可以进行分配

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

    • 承诺。内存块被分配给物理存储器

    因此,
    #提交的总字节数
    是当前使用的内存总量,
    #保留的总字节数
    是尚未提交(物理存储)的保留内存


    我的理解是,保留字节已准备就绪,但物理存储尚未准备好接收数据

    所有堆中提交的总字节数与#字节数之间是否存在任何关系?这两个不应该是一样的吗?这是另一个很好的问题。除了一个(堆)是另一个的子集之外,我想不出其他任何东西。我的猜测(有人可能会纠正我)是,两者之间的区别在于可用于新分配的内存。