针对特定工作负载调整窗口虚拟内存/分页

我有一个特定的内存密集型程序,每次运行后都会使整个系统运行数个小时 – Windows NT 6.0 / 6.1内核是否有可调参数来鼓励进程的工作集更快地被重新分页到内存中?

有问题的程序将一个1.5GB的文件读入一个1.5GB的malloc缓冲区,稍微处理一下,然后退出。

在运行时,所有其他程序按预期分页到磁盘。 程序结束时,程序不会再回送。 即使我等了几个小时,也不会被带回来。 这意味着,当我出现并试图使用我的电脑时,它慢慢地慢了很多年,而我慢慢地将每个过程重新分页。

当进程退出时出现,任务pipe理器显示的“caching”内存数量非常大,“空闲”非常低。 每个正在运行的进程只使用1或2 MB的“工作集”,而他们有正常数量的“提交大小”,表示他们的大部分页面在磁盘上。

对我来说,这似乎是Windows正在使用RAM的磁盘caching,以保持我的大1.5GB文件刚刚incase我想重新读取它(我不),而不是取回我的正常进程。 有没有办法强制这个平衡的过程,远离磁盘caching?

程序结束时,程序不会再回送。 即使我等了几个小时,也不会被带回来。

Windows不会重新为其他进程重新分配内存,直到这些页面实际使用它们为止。 没有任何参数(我知道)会导致页面被重新分页,直到这些页面被实际引用。

如果确实如此,那么通常会浪费时间和内存页面来分配最终不会使用的内容。 假设你有五个进程大部分被调出。 应该带回哪一个? 猜一下? 他们所有的一点点? 或者等到你开始使用一个,然后尽可能多的RAM可用?

对我来说,这似乎是Windows正在使用RAM的磁盘caching,以保持我的大1.5GB文件刚刚incase我想重新读取它(我不),而不是取回我的正常进程。

Windows,特别是更新的版本,会积极地使用多余的RAM来caching“热”文件,但这绝不会牺牲需要RAM的程序。 这些页面很快就会牺牲其他需要内存的进程。 速度很快,因为磁盘caching页面不需要分页到页面文件。 它们只是重新映射到需要它的进程的地址空间。

(我真诚地怀疑,一个1.5GB的文件,一旦打开,使其“热”文件状态。)

这意味着,当我出现并试图使用我的电脑时,它慢慢地慢了很多年,而我慢慢地将每个过程重新分页。

这听起来像一切正常工作,但你可以站在添加更多的RAM或升级到更快的驱动器。

如果您仍然觉得有些腥意,请发布更多具体信息,例如您使用的是哪个版本的Windows,机器有多less内存等等。

您可以将提示传递给CreateFile以表明Windows不会caching该文件。 这将阻止它首先将其他进程分页。