2

我的應用程序顯示了不同性能計數器的以下值。瞭解應用程序內存使用情況

enter image description here

我有兩個問題。

  1. 我認爲字節#在所有堆代表.NET內存使用 所有堆。如果這是正確的,那應該等於 Gen 0,1,2和大對象堆的堆大小,這裏不是這種情況。

  2. 保留字節表示.net用於滿足下一個分配要求的可用內存。在這種情況下,不應該保留 字節始終大於提交的字節,這裏不是 。

有人可以請解釋我在這裏誤解了什麼嗎?

回答

1

問題1

根據Microsoft documentation

代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是所述存儲器保留還未被COMMITED(物理地存儲)。

我明白這一點的方式是保留字節爲您準備好,但物理存儲尚未準備好接收您的數據。

+0

所有堆中的提交字節總數和#Bytes之間是否有任何關係?這兩個不一樣嗎? – BKS

+0

這是另一個很好的問題。除了一個(堆)是另一個的子集之外,我想不出其他任何東西。我的猜測(有人可能會糾正我)是兩者之間的差異是可用於新分配的內存。 – ForguesR

相關問題