簡體   English   中英

在沒有頁面文件的系統上修整“工作集”會有什么效果?

[英]What will the effect of trimming my “working set” be on a system with no page file?

客戶抱怨我的程序使用了太多的內存。 但是,與他們合作了一段時間之后,我意識到:

  1. 他們已經關閉了頁面文件(在其終端服務框中)。
  2. 他們擔心我的程序的任務管理器中“私有工作集”圖形的大小。

因此,我的問題是,如果我在程序啟動后僅使用EmptyWorkingSet()來調整工作集的大小(它在XML解析期間會占用大量內存,然后將其刪除,但工作集似乎並不會消失向下),我可以使工作設定圖正確向下。 但是,這實際上對客戶有幫助嗎? 我覺得這只是意味着將對工作集進行分頁,並且我相信如果您關閉了頁面文件,那么無論如何工作集都將由真實內存來支持。

真的可以說,任務管理器報告為“私有工作集”實際上是我的程序分配了新的/分配的多少?

至少從標准術語的意義上講,“私有工作集”是程序已映射的內存量,該內存量不由磁盤或其他共享資源上的文件(程序可執行文件,dll或手動內存映射文件)支持。 如果啟用了交換(分頁)功能,則它是程序被完全交換出內存時將占用的交換空間量。

我同意您的管理,您需要修復need腫的程序。 對於要求低延遲的客戶,關閉交換是一個非常明智的決定。 如果您的程序使用2GB的內存,也許您需要重新考慮使用什么庫來表示內存中的XML數據。

您已經注意到new/malloc之后您的工作new/malloc 這是因為他們要求操作系統提供內存。 您還注意到, delete/free之后它不會消失。 這是因為它們不會將內存返回給操作系統。 在正常,理智的系統上,這不是問題。 您的進程未使用的內存空間將最終以交換狀態,原始狀態和RAM耗盡狀態出現。

在此特殊框上,最好直接調用HeapAlloc來覆蓋operator new operator delete ,而調用HeapFree來覆蓋operator delete 不要為Server 2003啟用低碎片堆; 它已經是2008年的默認值。

私有工作集似乎是您的程序單獨使用和需要的虛擬內存,因此我不確定重置是否會為您提供幫助。 我會找出為什么您的程序要使用這么多內存,而不是嘗試使用私有工作集。

內存泄漏?

暫無
暫無

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

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