每當我正在處理其他事情並且需要讓 CPU/GPU 處理該任務時,我都會使用 PsSuspend 透過其 PID 來暫停使用過多 CPU 或 GPU 運算資源的進程。但是,這些掛起進程的記憶體保留在 RAM(或 GPU 的 VRAM)中。
有沒有什麼方法可以將掛起程式內存的內容寫入磁碟,然後為作業系統釋放內存,以便當進程恢復時,它會從磁碟讀回內存並正常繼續?我有興趣在系統記憶體 (RAM) 和視訊記憶體 (VRAM) 上實現這一點。我不認為這可以用 PsSuspend 來完成,但我懷疑 Windows API 和 C++ 可能可以做到。如果這是不可能的,你能解釋為什麼不行嗎?
答案1
從https://stackoverflow.com/questions/49756405/do-suspended-processes-still-use-up-cpu-ram
掛起的 Win32 進程不會釋放任何內存,但在可用實體 RAM 很少的系統上,應用程式的部分內容可以從 RAM 移動到頁面文件,以釋放 RAM 供其他活動應用程式使用。可以呼叫 SetProcessWorkingSetSize 來強制減少進程工作集中的頁面。
也許您可以使用 Docker 容器或虛擬機,這樣您就可以暫停/暫停整個工作流程並釋放所有使用的資源。