修剪我的“工作集”在没有页面文件的系统上会有什么效果?

一位客户抱怨我的程序使用了太多内存。 但是,在与他们合作一段时间之后,我意识到:

  1. 他们已经closures了他们的页面文件(在他们的terminal服务箱)。
  2. 他们担心我的程序在任务pipe理器中的“私人工作集”图的大小。

所以,我的问题是,如果我只是在我的程序启动后用EmptyWorkingSet()修改工作集的大小(它在XMLparsing过程中使用了大量的内存,然后删除它,但工作集似乎并没有去下)我可以让工作集的数字下降。 但是,这实际上会帮助客户吗? 我有一种感觉,这只是意味着工作集将被分页,我相信,如果你closures了页面文件,那么工作集是由真实内存支持….

是否真的说,什么任务pipe理器报告为“私人工作集”真的是我的程序有多less新/ malloced?

Solutions Collecting From Web of "修剪我的“工作集”在没有页面文件的系统上会有什么效果?"

你已经注意到你的工作集在new/malloc之后上升了。 这是因为他们要求操作系统的内存。 你也注意到, delete/free后它不会停止。 这是因为它们不会将内存返回到操作系统。 在一个正常的,理智的系统上,这不是问题。 您的进程未使用的内存空间将最终在交换,未触及和内存不足。

在这个特殊的框中,你最好用直接调用HeapAlloc来覆盖operator new ,然后调用HeapFreeoperator delete 。 请为server 2003启用低碎片堆; 这已经是2008年的默认了。

至少在标准术语的意义上,“私有工作集”是指程序映射的内存量,不受磁盘或其他共享资源上的文件(程序可执行文件,dll或手动内存映射文件)的支持。 如果启用了swap(分页),那么当程序完全交换内存时,它将占用交换空间。

我同意你的管理,你需要修复你的臃肿的程序。 对于具有低延迟要求的客户来说,关闭交换是一个非常明智的决定。 如果你的程序使用2GB的内存,也许你需要重新思考你用来在内存中表示XML数据的任何库。

私人工作集似乎是您的程序单独使用和需要的虚拟内存,所以我不确定重置是否会帮助您。 我会发现你的程序为什么要使用这么多的内存,而不是试图在私人工作集中玩耍。

内存泄漏?