繁体   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