簡體   English   中英

幫助理解Windows內存 - “工作集”

[英]Help understanding Windows memory - “Working Set”

我一直在追蹤我的應用程序中的一些內存泄漏。 這是一個真正的痛苦,但我終於收緊了一切。 但是,有一點Windows內存管理令我感到困惑。 以下是應用程序內存使用情況的打印輸出...

Time        PrivateMemorySize64        WorkingSet64
20:00:36    47480,                     50144
20:01:06    47480,                     50144
20:01:36    47480,                     50144
20:02:06    47480,                     149540
20:02:36    47480,                     149540
20:03:06    47480,                     149540

工作裝置在30秒的時間內從49 MB跳到146。 這種情況在一夜之間發生,因為應用程序基本上什

工作集(這是任務管理器向我展示的)似乎能夠受到其他應用程序(如調試器)的影響(正如我在查找內存泄漏時所了解的那樣)。 在閱讀了有關工作集的文檔后,我仍然沒有很好的理解。

任何幫助表示贊賞。

更新 :感謝響應者的一些鏈接以及一些額外的搜索,我更好地了解了一個單獨的流程如何導致我的流程的工作集增長。 很高興知道工作集中的峰值並不一定表明你的應用程序正在泄漏...還有理由不依賴任務管理器進行內存評估:)

有用的網址:

關於內存使用情況的幾句話:工作集與私人工作集

Cyber​​Notes:Windows內存使用說明

簡單地說,工作集是您的進程當前擁有的內存頁面的集合,而不是換出(即在RAM中)。 然而,這有點不准確。 現實要復雜得多。

Windows為每個進程維護最小工作集大小和最大工作集大小。 最小工作集很容易,它將授予Windows每個進程(只要它可以通過物理限制)。

最大工作集更加可疑。 如果您的程序使用的內存超過其配額中的內存,Windows將刪除一些頁面。 然而,雖然它們不再在您的工作集中,但這些頁面不一定 “消失”。

相反,這些頁面將從您的工作集中刪除並移動到可用頁面池中。 因此,如果某些其他程序需要更多內存並且沒有剩余已清除的頁面,則您的頁面將被清除,並分配給不同的進程。 當您訪問它們時,如果仍然高於最大工作集大小,則需要再次從交換文件中提取它們,可能還要清除其他頁面。

但是,如果沒有人要求同時獲得更多內存(或者無論如何都可以通過未使用的頁面滿足所有要求),那么訪問其中一個頁面只會使其“神奇地重新出現”並取而代之的是另一頁。

因此,您的進程可以在RAM中擁有比實際工作集中更多的頁面,但它並不“正式”擁有它們。

駐留集/工作集虛擬地址空間的一部分,當前駐留在物理內存中 ,因此不會被交換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM