0

有没有办法从 Windows 的命令行运行程序,同时强制 Windows 仅将进程保留在 RAM 中而不将其交换到磁盘?

4

1 回答 1

1

通常,您无法安全可靠地防止正常应用程序看到页面错误(从磁盘加载,或者只是在池中重新排列页面)。这通常也不是问题。

页面错误(没有磁盘访问)一直在发生,它们需要几十纳秒。Windows 经常将页面移入和移出非常小的工作集。这并不意味着您的工作集之外的页面已经“消失”,但如果有人要求更多内存,它们可能会被交换/丢弃。大多数情况下,当您再次访问工作集之外的页面时,它仍然存在,只是默默地移回工作集,将另一个(可能是最不重要的)推出。
从磁盘重新加载页面(数据或程序代码)的速度要慢得多,但通常不会经常发生,只要程序实际正在运行并且机器的 RAM 不是非常低。如果发生这种情况,坦率地说,没有什么可以做的不同,因为这意味着内存比需要的少。

您可以使用VirtualLock锁定地址空间的页面(任何页面,包括被代码占用的页面),但这仍然不是硬性保证(即使文档会让您相信)并且它仅在工作集范围内有效,默认情况下很小(略大于 1 MiB)。
然而,锁定给你的最好保证是,当你的进程运行时,你锁定的页面在 RAM 中。这意味着,理论上,当您的进程未运行时,它们可能在下一次上下文切换时被换出。

但是,如果您为应用程序提供足够大的最大工作集大小 ( SetProcessWorkingSetSize),则页面错误(在代码中或一般情况下)极不可能发生。
请注意,绝大多数程序大部分时间都驻留在内存中,即使它们已完成运行(缓冲区缓存)。

于 2013-02-14T11:37:22.197 回答