首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >监控桌面堆内存

监控桌面堆内存
EN

Stack Overflow用户
提问于 2011-04-28 04:19:55
回答 3查看 6.9K关注 0票数 12

有没有办法找出哪个应用程序正在耗尽所有的桌面堆内存?

有关“桌面堆”的解释,请参阅this MSDN blog

编辑:如果你不知道什么是“桌面堆内存”,请不要回答。

EDIT2:如果你不知道什么是“桌面堆内存”,不要投票结束这个问题。

EN

回答 3

Stack Overflow用户

发布于 2011-04-28 04:38:51

根据这篇blog文章,你应该寻找用户对象。要查找损坏的应用程序,可以在Process Explorer中配置USER Objects列。然后按用户对象降序排序。用户对象都是GUI对象,如Windows、工具栏、图标、光标……具有最高值的进程很可能是最糟糕的进程。

直接链接到下载:微软的DHeapMon

票数 4
EN

Stack Overflow用户

发布于 2019-05-10 03:31:41

免责声明:我为微软工作,这些是我个人的想法和经验,可能会也可能不会反映当前或未来的微软政策/程序/等。

我知道这是旧的,但由于我偶然发现了它,我想提供一些反馈/答案。

台式机堆监视器在Vista+上不起作用。DHeapMon依赖于修补内核二进制文件来跟踪桌面堆的能力-这一行为被阻止了,这就是它不起作用的原因。

要自己监视桌面堆,您所能做的就是查看用户对象(不幸的是)。

要获得完整的答案,您可以使用内核或完全转储(而不是进程转储!)它们可以检查堆并为您提供一些信息。它是通过我编写的调试器扩展从转储文件中提取出来的。

限制:

  1. 只能在内核模式下工作。即使桌面堆映射存在于用户模式中,扩展也不支持它。即使我添加了对桌面堆的用户模式调试的支持,它也是有限的,因为一些相关的数据只在内核模式下。对Windows10最新版本的更改可能会进一步限制它,所以我没有投入时间来添加用户模式支持。
  2. 它无法测量转储中没有的内容。换句话说,如果桌面堆缺少页面,它将尽最大努力,但显然会失去准确性。由于堆管理器的更改,
  3. 目前还不支持Windows10 build 1809或Server2019。

祝你编码愉快!

票数 4
EN

Stack Overflow用户

发布于 2011-04-28 04:23:06

如果你想在你的程序中做到这一点,C++可以使用WMI来找到罪魁祸首。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5810046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档