如何强制Windows向所有应用程序发送'LOW_MEMORY'信号?

How to force Windows to send 'LOW_MEMORY' signal to all applications?

本文关键字:LOW MEMORY 信号 Windows 何强制 应用程序      更新时间:2023-10-16

我正在开发一些"空闲RAM"工具,该工具必须强制Windows向所有应用程序发送'LOW_MEMORY'信号(要求所有应用程序释放其未使用的数据,SQL服务器和文件缓存被清除,因此您最终会得到大量额外的可用空间)。

在C++做到这一点的最佳方法是什么?对我来说,最"自然"的解决方案是分配大量内存,但这是一种"好"和"稳定"的方式吗?也许在WinAPI或其他地方有任何c ++ Windows本机函数?

附言该工具的概念来自(我知道更好的方法是......买一些RAM,但我现在必须写这样的工具):

https://superuser.com/questions/214526/how-does-a-free-up-ram-utility-free-up-ram

另一种可能性是迭代活动进程列表,并要求每个进程通过 SetProcessWorkingSetSize( hProcess, (SIZE_T)-1, (SIZE_T)-1) 修剪其工作集,如 MSDN 上此处所述,如果您的目的是尝试提高某些特定应用程序的性能,则可能会跳过应用程序(基准测试绝对是您的朋友)。

这会导致操作系统将虚拟页面刷新到磁盘,从而为其他应用程序释放物理内存。 我不确定这是否会导致,例如,SQL Server放松其内存需求,但肯定值得一试。

有一些链接可能对您在 MSDN 有用:

  • 释放用户物理页面
  • 全局免费功能
  • 本地免费功能
  • 堆免费

希望这些可以给你一个开始。 释放 RAM 的另一种方法是向窗口发出信号,将每个进程的 RAM 分配分页以交换文件,这将释放物理 RAM。 然后,当用户使用特定应用程序时,它将由操作系统移回物理 ram,这样管理仍然大部分由操作系统处理。