在Windows上从RAM运行程序

时间:2013-02-14 09:33:52

标签: windows command-line ram

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

1 个答案:

答案 0 :(得分:1)

通常,您无法安全可靠地阻止正常的应用程序查看页面错误(无论是从磁盘加载,还是只是在池中重新排列的页面)。它通常也不是问题。

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

您可以使用VirtualLock来锁定地址空间的页面(任何页面,包括代码占用的页面),但这仍然不是很难保证(即使文档会让您相信)并且它只是工作集一直工作,默认情况下非常很少(略超过1 MiB)。
但是,锁定为您提供的最佳保证是,在您的进程运行时,您锁定的页面位于RAM中。从理论上讲,这意味着,当您的流程未运行时,他们可能会在下一个上下文切换时仍然被换掉。

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