![如何在 Windows 上设置内存优先级(不是 CPU 优先级)](https://linux22.com/image/1270014/%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%E5%86%85%E5%AD%98%E4%BC%98%E5%85%88%E7%BA%A7%EF%BC%88%E4%B8%8D%E6%98%AF%20CPU%20%E4%BC%98%E5%85%88%E7%BA%A7%EF%BC%89.png)
我需要知道如何更改进程的“内存优先级”。我需要一个可以更改进程内存优先级的实用程序。某些占用大量内存的程序仍会通过将其发送到页面文件而使我的重要程序冻结。我需要停止这种情况,并且我需要能够选择任何程序的确切优先级。此外,我正在使用 Windows Vista。
作为参考,我在 Google 上搜索了一下,什么也没找到。请注意,这不是“进程优先级”或 CPU 优先级。有人知道有哪个免费工具可以做到这一点吗?
答案1
据我所知,在 Windows 上没有办法确保进程停留在内存中。有一个名为 VirtualAlloc() 的 Win32 API,它将以内存管理器不会尝试将其推送到磁盘的方式分配内存。据我所知,这必须编码到应用程序中,并且无法由任何程序设置。通过增加计算机中的 RAM 数量,您可能会获得更好的结果。
答案2
您可以使用 SetProcessInformation 设置内存优先级:
https://msdn.microsoft.com/en-us/library/windows/desktop/hh448389(v=vs.85).aspx
我曾遇到过在意外设置为低内存优先级的进程中工作集耗尽的问题。这很不好玩。重启管理器和任务调度程序都可能最终出现这种情况。
答案3
在 Windows 中,MM 只会调出一段时间内未被访问的页面,而且当发生“上下文切换”时,您的代码将停止运行。
听起来你要么需要在高 IRQL 的内核中编写代码并只访问非分页内存,这是一个非常糟糕的想法,要么将目标操作系统更改为实时操作系统。