windows - 我可以阻止 Windows 过度急切地回收物理内存吗?

标签 windows memory

我正在编写一个服务器应用程序,我希望尽可能有效地使用机器的所有可用物理内存。计划是它将使用 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/

相关文章:

windows - Windows 上 git log 中的颜色和作者?

windows - Groovy:如何将 .groovy 脚本作为 Windows 服务

security - 明确从内存中删除敏感数据?

c++ - 如何找出 Windows 中实际安装了多少内存?

linux - 将内存区域限制为线程

javascript - 对仅运行 HTML 和 JS 的浏览器进行沙箱处理

ruby - 如何使用 Ruby 从服务中获取 Windows 域中的用户名?

c# - webBrowser 控件中的 PDF 文档在关闭应用程序时导致 'The memory could not be "read"' 错误

c# - 使用 C# 以编程方式禁用 Taskmanager

objective-c - 跟踪所有 Objective-C 的 alloc/allocWithZone/dealloc