在Windows上从RAM运行程序

在Windows上从RAM运行程序,windows,command-line,ram,Windows,Command Line,Ram,有没有一种方法可以在Windows中通过命令行运行程序,同时强制Windows仅将进程保留在RAM中,而不将其交换到磁盘?通常,您无法安全可靠地防止正常应用程序看到页面错误(从磁盘加载,或仅在池中重新排列页面)。这通常也不是问题 页面错误(没有磁盘访问)总是会发生,而且需要几十纳秒。Windows通常在一个非常小的工作集内进出页面。这并不意味着工作集之外的页面“消失”,但如果有人要求更多内存,它们可能会被交换/丢弃。大多数情况下,当您的工作集之外的页面再次被访问时,它仍然存在,只是被愚蠢地移回工

有没有一种方法可以在Windows中通过命令行运行程序,同时强制Windows仅将进程保留在RAM中,而不将其交换到磁盘?

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

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

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

但是,如果为应用程序提供足够大的最大工作集大小(),则页面错误(在代码中或一般情况下)极不可能发生。

请注意,绝大多数程序大部分时间都驻留在内存中,即使它们已经完成运行(缓冲区缓存)。

为什么要这样做?@Guffa-我有一个关键的过程,必须优化其响应时间。由于磁盘访问而额外增加几百万秒是非常糟糕的。你把注意力放在了错误的问题上,计划程序会毁了你的一天。您无法将线程优先级提高到足以避免丢失处理器的程度。预计会损失45毫秒。您将需要编写一个设备驱动程序,它将为您提供所需的优先级提升和锁定代码和数据页的选项。但无法从命令行运行;)你可以使用RAM磁盘。我相信有一些第三方产品,其中一些可能是便宜或免费的。不过,我倾向于同意汉斯的观点,即这不太可能有多大帮助。