2009-06-14 101 views
2

我的程序有7,667,712字節的已提交堆,但它有33,546,240個保留堆字節!我可以看到該程序使用大約44 MB的專用字節。我怎樣才能讓.NET GC爲託管堆預留更少的空間?.NET提交與保留堆大小

回答

3

最簡單的答案是你不能。 .Net GC是自調整的,它會熱切地保留內存,但它不會在內存需要時才提交內存,當內存不再需要時,它會被重新保留。

GC uncommit機器上存在高存儲壓力時的記憶。

33 MB不是那麼大,因爲默認情況下(如果您的進程是32位,並且您正在運行工作站GC模式),您將爲16 MB的小對象堆保留默認段。

6

僅僅因爲你的進程已經保留了內存,並不意味着它正在使用那個內存。

在Windows中,保留內存意味着您的進程已將映射頁面映射到它是地址空間。物理內存通過提交這些保留頁面來分配。當然,即使這樣,你也不一定要使用那個內存,因爲提交的頁面可以換出到頁面文件,暫時釋放底層的物理內存。

總之,這不是你(通常)需要擔心的事情。你試圖解決什麼問題?

+1

我知道什麼是承諾和保留的意思。問題在於用戶經常抱怨.NET應用程序的內存使用率過高,我想以某種方式隱藏它。 – wj32 2009-06-14 07:06:32