我的應用程序顯示了不同性能計數器的以下值。瞭解應用程序內存使用情況
我有兩個問題。
我認爲字節#在所有堆代表.NET內存使用 所有堆。如果這是正確的,那應該等於 Gen 0,1,2和大對象堆的堆大小,這裏不是這種情況。
保留字節表示.net用於滿足下一個分配要求的可用內存。在這種情況下,不應該保留 字節始終大於提交的字節,這裏不是 。
有人可以請解釋我在這裏誤解了什麼嗎?
我的應用程序顯示了不同性能計數器的以下值。瞭解應用程序內存使用情況
我有兩個問題。
我認爲字節#在所有堆代表.NET內存使用 所有堆。如果這是正確的,那應該等於 Gen 0,1,2和大對象堆的堆大小,這裏不是這種情況。
保留字節表示.net用於滿足下一個分配要求的可用內存。在這種情況下,不應該保留 字節始終大於提交的字節,這裏不是 。
有人可以請解釋我在這裏誤解了什麼嗎?
問題1
代0顯示可在生成 0被分配的最大字節數;它並不表示在 代0
分配的字節數電流所以#Bytes in all Heaps
等於Gen 1 heap size
,Gen 2 heap size
和Large Object heap size
。你可以做數學。
問題2
虛擬內存可以有三種狀態:
免費。內存塊沒有對它的引用,可用於分配。
保留。內存塊可供您使用,不能用於任何其他分配請求。但是,在提交之前,不能將 數據存儲到此內存塊。
承諾。內存塊被分配給物理存儲器。
# Total committed Bytes
所以是目前所使用的內存的總量和# Total reserved Bytes
是所述存儲器保留還未被COMMITED(物理地存儲)。
我明白這一點的方式是保留字節爲您準備好,但物理存儲尚未準備好接收您的數據。
所有堆中的提交字節總數和#Bytes之間是否有任何關係?這兩個不一樣嗎? – BKS
這是另一個很好的問題。除了一個(堆)是另一個的子集之外,我想不出其他任何東西。我的猜測(有人可能會糾正我)是兩者之間的差異是可用於新分配的內存。 – ForguesR