我正在编写一个服务器应用程序,我希望尽可能有效地使用机器的所有可用物理内存。计划是它将使用 AWE 分配物理页面,直到它检测到 99% 的物理内存并在 1% 空闲时停止,并且任何时候物理内存低于 1% 空闲时,它将释放它不需要的物理页面。
然而,当我将这个计划付诸实践时,Windows 似乎认为任何时候它有 99% 的 RAM 在使用中,释放更多物理内存是个好主意,因此它开始将各种内容分页到磁盘,我的系统崩溃了。
我如何告诉 Windows 使用 99% 的 RAM 是可以的,并且它不需要尝试将内容分页回磁盘,直到它达到其默认的理想使用水平(我想它会大约 90%...)
注意:Raymond 说“除非你设计的系统是计算机上唯一运行的程序,否则这是个坏主意。”
在此服务器场景中,此基本上旨在成为计算机上运行的唯一应用程序。但不幸的是,有一些操作系统/后台任务需要运行...
但我当然不希望计算机上有任何其他进程沉迷于这种“只使用 1% 的 RAM”行为...?
更新:我做了更多的实验,开始怀疑我是否问错了问题。我认为 Windows 过于急切的假设可能是错误的。也许问题应该改为“我如何才能确定我的进程可以安全使用多少物理 RAM 而不会影响机器的整体响应能力”?
最佳答案
你不能。 Windows 内存管理器运行在比您的程序更低的级别,并且对您的程序一无所知(即使知道,它也没有理由假定您的程序是您声称的好公民。如果您的程序崩溃,或者在 malloc
的循环中有一个差一错误?在你的程序运行时其他需要内存的程序怎么办?编写 Windows MM 的人在他们在写它?)
不要试图比 Windows 更聪明。更有效地利用您的时间是考虑您的应用程序是否确实需要预先分配 99% 的物理内存。
关于windows - 我可以阻止 Windows 过度急切地回收物理内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29548932/