windows下可以手動將程式傳送到虛擬記憶體嗎?

windows下可以手動將程式傳送到虛擬記憶體嗎?

如果您有許多開啟的程序,並且您的電腦記憶體/CPU 使用率過高,您可能需要關閉程式而不丟失其狀態(將其發送到虛擬記憶體),然後稍後恢復該程式。這是由作業系統自動完成的,但作業系統不知道您想要暫停程式多長時間,因此透過嘗試將每個程式的部分保留在記憶體上並將其他部分交換到虛擬內存,它最終會變得非常慢。手動將整個程式發送到虛擬內存,然後在需要時以相同的狀態檢索它,這將是一個很好的功能,有沒有任何工具可以做到這一點?或可以寫嗎?

答案1

您的程式始終在虛擬記憶體中運行。 (在設定頁面檔案大小的對話方塊中,Windows 的術語非常具有誤導性。)

您所要求的是強製程式被調出的能力。沒有辦法直接做到這一點。

因此,透過嘗試將每個程式的各個部分保留在記憶體中並將其他部分交換到虛擬內存,最終會變得非常慢。

那不會發生。未被存取的記憶體頁始終可以釋放以供其他用途(並根據需要寫入磁碟);作業系統不會“嘗試將每個程式的各個部分保留在記憶體中”,無論它們是否被存取。如果它們沒有被存取(空閒程式的私有頁面通常是這種情況),它們只會保留在記憶體中,直到其他程式的需求造成壓力為止。 (在那之前,將它們傳出是沒有意義的,對吧?)

透過 Windows XP,最小化應用程式的 Windows 會強制清除工作集,但我認為 XP 是最後一個出現這種情況的地方。

不過,如果您確實想這樣做,可以使用VMmapSysInternals 中的工具。當它啟動時,它會要求您選擇一個進程。執行此操作,然後選擇檢視|空工作集。

但請注意,這僅將頁面釋放到已修改或備用頁面清單。 (這只適用於不在任何其他進程的工作集中的頁面。)放入修改列表的頁面將被寫入頁面文件,然後移至備用列表。備用清單上的頁面被認為是“可用的”,但在它們被重新用於其他用途之前,它們仍將包含來自原始進程的內容。

最終結果與 Windows 在存在可用記憶體壓力時所做的操作完全相同 - 您只是在此類需求實際存在之前更快地執行此操作。

完整的細節當然在記憶體管理章節中Windows 內部架構作者:所羅門、魯西諾維奇和約內斯庫。

相關內容