如何强制Windows向所有应用程序发送'LOW_MEMORY'信号?
How to force Windows to send 'LOW_MEMORY' signal to all applications?
我正在开发一些"空闲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,这样管理仍然大部分由操作系统处理。
- Python ctype 'c_char_p' Memory Leak
- 模式"allocate memory or use existing data"
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- C++ "Using Uninitialized Memory.. (variable name) "
- "Memory Fragmentation"这仍然是一个问题?
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- 向量数组"Cannot access memory at address"
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- 我在 C++ "out_of_range at memory location"有问题
- QML QQmlPropertyList - 包含的对象生存期和'memory rules'
- Java 本机访问代码错误:"Invalid memory access"
- c++ 在 arduino 中传递 HIGH 和 LOW 的向量
- 编写"anti-lack of memory"异常安全代码
- 什么__asm挥发性("pause" ::: "memory");男孩
- 将 Dr. Memory 与 Visual Studio 项目配合使用时出错:缺少应用程序所需的库
- 如何修复代码中的"Invalid memory reference"错误?
- 如何找到导致"malloc(): memory corruption: 0x00"的线
- UrlDownloadToFile to Memory
- 如何安全地实施"Using Uninitialized Memory For Fun And Profit"?