
自從我增加了電腦上的記憶體後,非分頁池變得非常大(從 2GB 記憶體的 96MB 增加到 16GB 的 715MB)。
這是無法理解的,因為任務管理器報告由於進程而導致的非分頁池少於 1MB。 Poolmon 報告最大非分頁池記憶體使用量為 35MB。
該螢幕截圖是在啟動後立即製作的,因此這不是驅動程式中的記憶體洩漏等。製作鏡像並在虛擬機器中啟動,啟動後僅使用350MB記憶體!
Microsoft 在登錄中給出了一個值來限制非分頁池的大小:https://technet.microsoft.com/en-us/library/cc976155.aspx但這樣做並重新啟動並不能解決問題。我嘗試以位元組為單位(文檔是這麼說的)、以KB和MB為單位給出值。沒有運氣。
在 Linux 上,我可以渲染高達 15.2GB 的 3D 場景。在 Windows 上,由於一些保護和這個巨大的池,我只能使用 12GB,然後它開始交換到磁碟,這使得一次渲染需要 > 20 分鐘,而不是 Linux 上的 1 分鐘 24 秒。
那麼如何限制非分頁池的大小呢?
答案1
運行需要大量記憶體的程式(如 3D 或照片應用程式)並讓它佔用足夠的記憶體來開始使用頁面檔案將使非分頁記憶體被釋放。
我不知道為什麼,但在頁面文件開始使用的那一刻,非分頁池從750MB 下降到200MB,並在此之後保持在這個水平(在幾個小時的密集工作中進行了測試,大量程序正在運行和使用很多記憶體)。
在我的例子中,它使 windows7 僅從 16GB 記憶體總量中佔用 350MB(與啟動時的 1GB 記憶體總量相比)。當然,使用的內存要多得多,但透過快取可以很好地利用內存,這使得內存可用,同時使程式啟動更快,並且可以從 RAM 而不是磁碟讀取資料。如此巨大的預設非分頁池只會丟失內存,從而使系統比應有的時間更早地開始交換。
巨大的起始非分頁池的錯誤不會發生在 7 之前的 Windows 版本上。