如何在Windows中一次将内存从页面文件再次“交换”到物理内存中(例如linux swap-off)


10

是否有一种方法可以在Windows PC上换回(以放回放入页面文件中的所有内存数据(或交换,无论您希望使用什么))内存?

在linux上,可以通过swapoff / dev / sdaX轻松地做到这一点,其中X是交换分区。在Windows上,似乎每次都要求我重新启动。

我想这样做的原因是,即使将数据换出到交换文件中也可以让我在物理内存中完全玩一个资源匮乏的游戏,但是当我停止游戏时,我所有其他程序都将运行慢。这是正常的还是正常的;因为我的RAM太小,所有程序都被推送到页面文件中,并且游戏后所有程序对所有程序的内存访问都变成了硬页面错误,从而导致了严重的延迟和一些挫败感。

但是,只需让PC在一分钟左右的时间内将所有数据复制回物理内存,然后继续在快速运行的PC上工作,就可以轻松避免这种挫败感!(而不是忍受工作时的缓慢)

在此先感谢您的任何建议!

亲切的问候


您想要的是一个“管理程序”,上面运行着Windows的多个副本。您暂停一个,然后再取消另一个。在其他系统上已经做了很多工作,但是我不确定是否有一个管理程序可以在Windows系统上实现。
Daniel R Hicks

Answers:


6

抱歉不行。Windows虚拟内存系统的工作方式是,许多页面只有在它们出现故障之前才能被映射,并且除非被映射,否则无法存储在内存中。因此Windows必须等到页面被访问。


也许某些具有足够特权的第三方进程可以尝试访问这些页面,从而造成错误?
badp 2014年

另一个进程访问页面并没有多大用处。您需要将它们误认为要使用的应用程序的进程。
Jamie Hanrahan 2014年

想一想,它可以完成... 您必须将远程线程注入目标进程。然后,该线程将在地址空间上执行VirtualQuery,然后简单地读取每个进程专用页面。但是,没有办法区分RAM中的页面和后来分页的页面,以及最初从未分页的页面。也将没有办法识别该过程不再需要的页面。因此,您将分页不必要的许多工作。
Jamie Hanrahan

@JamieHanrahan听起来像行得通。
David Schwartz

1

不幸的是,没有这样的选择。

在Windows中减少交换的唯一方法是增加物理RAM。


或完全禁用交换。不一定是Windows的东西,但是在我的Linux / BSD机器上,我禁用了任何形式的轮换,因为它没有好处,并且当事情开始使用它时,而不是达到硬性限制,它们会使一切变慢。
杀手主义者

1
禁用页面文件不会禁用对磁盘的页面调度。它只会禁用专用承诺地址空间的页面调出。内存映射文件的内容仍将被调入和调出。
Jamie Hanrahan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.