匝抽 发表于 2025-6-8 13:21:04

win32 低内存通知事件

本文属于读 《深入解析 Windows 操作系统》 读书笔记
应用程序可以调用 CreateMemoryResourceNotification function 函数指定自己期望接收到内存多或内存少的通知
如在 dotnet 的 CLR 层的 finalizerthread 部分,就使用了以下代码进行获取通知
MHandles =
      CreateMemoryResourceNotification(LowMemoryResourceNotification);以上的参数的 LowMemoryResourceNotification 表示的是可用物理内存不足。对应的还有 HighMemoryResourceNotification 表示可用物理内存很高
配合 QueryMemoryResourceNotification function可以进行查询当前的内存状态
使用例子代码请参阅 https://stackoverflow.com/a/54529790 提供的例子
另一个方面则是通过以下内存管理器的通知事件获取通知

[*]HighCommitCondition: 如果提交用量接近最大提交限制,即内存用量非常大,物理内存或页面文件中可用空间极为有限,且系统无法增加页面文件的大小,将设置此事件。换句话就是内存用多了,能释放的话赶紧释放
[*]LowCommitCondition: 当提交用量相对于当前提交限制较低,即内存用量低,且物理内存或页面文件存在大量可用空间时,将设置该事件。换句话说就是现在豪气,随便用
[*]HighMemoryCondition: 当空闲物理内存数量超过预设值时将设置该事件
[*]LowMemoryCondition: 当空闲物理内存数量低于预设值时将设置该事件
如果要查看内存资源通知事件,可以运行微软极品工具箱的 WinObj 工具,查看 KernelObjects 文件夹里面的大内存和小内存事件,如下图所示

双击即可看到对应的对象产生了多少句柄和引用
如果想要了解系统中有哪些进程请求了内存资源通知,可以使用 Process Explorer 的 Find 菜单进行搜索句柄表,如下图

更详细内容请大家自行阅读书籍
参考文档:

[*]CreateMemoryResourceNotification function (memoryapi.h) - Win32 apps Microsoft Learn
[*]QueryMemoryResourceNotification function (memoryapi.h) - Win32 apps Microsoft Learn

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

厥轧匠 发表于 2025-10-15 12:05:00

感谢分享,学习下。

都淑贞 发表于 2025-10-24 11:02:39

这个好,看起来很实用

豹筒生 发表于 2025-12-11 02:50:58

谢谢分享,辛苦了

国语诗 发表于 2025-12-14 16:58:54

感谢分享,下载保存了,貌似很强大

糙昧邵 发表于 2025-12-14 17:27:43

分享、互助 让互联网精神温暖你我

恶凝毛 发表于 2025-12-20 05:33:38

鼓励转贴优秀软件安全工具和文档!

甄婉丽 发表于 2025-12-27 14:03:30

感谢分享

丰江 发表于 2025-12-29 04:58:09

新版吗?好像是停更了吧。

崆蛾寺 发表于 2026-1-16 20:18:04

东西不错很实用谢谢分享

蝌棚煌 发表于 2026-1-18 14:02:57

过来提前占个楼

讹过畔 发表于 2026-1-18 20:35:37

用心讨论,共获提升!

王妍芳 发表于 2026-1-19 08:03:54

这个有用。

公西颖初 发表于 2026-1-20 11:24:07

热心回复!

嗦或 发表于 2026-1-21 18:00:14

感谢发布原创作品,程序园因你更精彩

觞刈 发表于 2026-1-22 11:39:58

这个好,看起来很实用

赏听然 发表于 2026-1-22 11:40:49

懂技术并乐意极积无私分享的人越来越少。珍惜

喳谍 发表于 2026-1-23 09:38:54

谢谢分享,试用一下

伯绮梦 发表于 2026-1-23 13:02:32

过来提前占个楼

拼匍弦 发表于 2026-1-28 06:21:12

谢谢楼主提供!
页: [1] 2 3
查看完整版本: win32 低内存通知事件