2011-07-07 49 views
3

我問這個問題是因爲後人的原因和普遍的興趣。幾年前,我注意到了Windows中的一個奇怪行爲。我知道這工作在XP和當時它在Windows 2000也工作,甚至98,我會承擔起這種行爲仍然適用於Windows 7Windows操作系統和內存管理 - 應用程序最小化時會發生什麼?

設置我的問題,通過以下步驟嘗試這個實驗。

  1. 打開任務管理器並導航到進程選項卡。
  2. 打開你使用,你知道佔用內存的相當數量的應用程序(Web瀏覽器應該很好地工作),發現在任務管理器的進程。
  3. 現在通過打開窗口,文檔,網頁等來使用應用程序,直到應用程序的內存使用量顯着增長。
  4. 記下的應用程序內存使用情況,儘量減少你應該看到的內存量的顯著減少應用程序正在使用application--。
  5. 最後,恢復應用程序。

恢復窗口後,您應該認爲應用程序的內存使用量應該略高一點,但不要超過最小化應用程序之前的位置。這與任何基於GUI的應用程序都非常一致,但對於更大的應用程序而言,它肯定更加深刻。

問題

內部的操作系統中,哪些進程正在發生,迫使這個(假定)垃圾收集發生?此外,通過COM或者一些.Net調用,是否有一種方法可以在不最小化應用程序的情況下強制執行此過程?如果是這樣,請提供源代碼。語言無關緊要。

如果你像我一樣,你可以保留大量的應用程序在同一時間打開。內存使用可能會蔓延起來......在你知道它之前,你需要關閉一些應用程序來釋放資源。如果我至少可以集成到我已經控制一種機制來強制從操作系統中進行垃圾收集的軟件中,這很好,就像上面的練習中的行爲一樣。

我知道,在.net中有一個GC對象,並可以調用垃圾清理,你的願望。然而,它並不與應用程序最小化時發生的內存清理的性質有關。

我希望這是一個讓人摸不到頭腦,並且經過多年的好奇心someone-能給我是怎麼回事的好,技術講解。

頁文件,並進一步沿着走「兔子洞」

有趣的東西已經張貼作爲回答這個問題由Kragen &亞歷克斯·K.在閱讀它們都貼Knowledge Base article,我看到有也是防止這種行爲發生的一種方法。什麼時候你想防止這種分頁發生的例子?我正在嘗試閱讀文檔以儘可能多地瞭解這一點。很多這些信息對我來說都是新的,因爲我從來不需要在.Net應用程序中實現這些。考慮一個用例會幫助我理解爲什麼以及何時我想要避免這種行爲的推理。

+2

當窗口最小化時,大多數應用程序(我知道Firefox)需要時間來清理,因爲它不會干擾用戶。你嘗試過哪些應用程序?你確定它是一個操作系統級別的東西? – Earlz

+3

術語「內存使用情況」並不十分精確。你的意思是工作集,虛擬地址空間的大小,私人字節,還是什麼? –

+0

@ Earlz--這似乎與每個應用程序(MS Word,Access,Excel,Web瀏覽器,設計環境等)都非常一致,所以我認爲這是通過Windows系統調用發生的,即內核在應用程序被最小化。 – RLH

回答

7

你看到這個過程是不垃圾收集 - Windows正在「修剪工作集」(即分頁的內存,因爲它可以到磁盤),以釋放內存爲前臺應用程序。

請參見以下鏈接瞭解更多信息:

以上鍊接的知識庫文章介紹了兩種如何可以防止這種自動發生(通過截獲WM_SYSCOMMAND命令),以及您如何明確地在任何時候發生這種情況(通過撥打SetProcessWorkingSetSize)。

+0

非常好!問題在30分鐘內解決!我<3所以!我最後一次試圖研究這種行爲(可能是大約5年前),我無法在任何地方找到答案。這些信息正是我一直在尋找的。 – RLH

相關問題