2011-09-12 57 views
5

閒置的好奇心......爲什麼是Process.WorkingSet> Process.MaxWorkingSet?

我在看一些當前進程的屬性:

using(Process p = Process.GetCurrentProcess()) 
{ 
    // Inspect properties 
    // p.MaxWorkingSet = 1,413,120 
    // p.MinWorkingSet = 204,800 
    // p.WorkingSet = 54,140,928 
    // p.WorkingSet64 = 54,140,928 
} 

從我的文檔閱讀,這些特性都與工作集大小字節,因此我期待看到:

MinWorkingSet <= WorkingSet <= MaxWorkingSet 

這不是這種情況,任何人都可以解釋爲什麼?

+4

它在我看來像MaxWorkingSet IS更大。查看WorkingSet中的點。 –

+1

@布萊恩,道歉,那段時間應該是一個逗號,糾正。我用一個逗號手動替換了我的本地千位分隔符並錯過了那一個。 – Joe

+0

沒有問題,+1是一個很好的問題。 –

回答

2

MaxWorkingSet和MinWorkingSet是由Win32 API GetProcessWorkingSetSize返回的值。這些是虛擬管理器使用的限制,當內存不足時將執行這些限制。只要有足夠的內存可用,當前的工作集大小就允許增長大於MaxWorkingSet中的值。

+0

有趣。如果你有一個MSDN賬戶,那麼如果你有這個信息,這將是一件好事。 – Bobby

+0

@plodoc,謝謝,這說得很清楚。 – Joe

1

雖然MSDN is not reallyhelpful in this case,而另一方面小調查與Process Explorer透露,Private Memory/MaxWorkingSetShared Memory/WorkingSet值做幾乎完全匹配。

這讓我相信(是的,我也沒有確鑿的證據),該MaxWorkingSet確實顯示了私有內存而WorkingSet64不顯示完整的記憶,包括共享一個。

我知道MSDN所說的......我不在乎,我在Process Explorer中看到不同的東西。

+0

關於你的最後一句話:有很多例子 - 我現在都不記得 - 這表明MSDN的確有錯誤。所以,如果你觀察到與MSDN相矛盾的東西,那麼變化很大,MSDN有一個錯誤,而不是你的觀察錯誤。 –

+0

在這種情況下,MSDN是正確的:) – plodoc

+0

當我在Windows 2008 R2的進程資源管理器中添加列最小工作集和最大工作集時,我看到除dwm.exe(桌面Windows管理器已增加其值)之外的所有進程,具有相同的200Kb和1300Kb的值,這些也被Joe看到。 – plodoc