有没有办法找出哪个应用程序正在耗尽所有的桌面堆内存?
有关“桌面堆”的解释,请参阅this MSDN blog。
编辑:如果你不知道什么是“桌面堆内存”,请不要回答。
EDIT2:如果你不知道什么是“桌面堆内存”,不要投票结束这个问题。
发布于 2011-04-28 04:38:51
根据这篇blog文章,你应该寻找用户对象。要查找损坏的应用程序,可以在Process Explorer中配置USER Objects列。然后按用户对象降序排序。用户对象都是GUI对象,如Windows、工具栏、图标、光标……具有最高值的进程很可能是最糟糕的进程。
直接链接到下载:微软的DHeapMon。
发布于 2019-05-10 03:31:41
免责声明:我为微软工作,这些是我个人的想法和经验,可能会也可能不会反映当前或未来的微软政策/程序/等。
我知道这是旧的,但由于我偶然发现了它,我想提供一些反馈/答案。
台式机堆监视器在Vista+上不起作用。DHeapMon依赖于修补内核二进制文件来跟踪桌面堆的能力-这一行为被阻止了,这就是它不起作用的原因。
要自己监视桌面堆,您所能做的就是查看用户对象(不幸的是)。
要获得完整的答案,您可以使用内核或完全转储(而不是进程转储!)它们可以检查堆并为您提供一些信息。它是通过我编写的调试器扩展从转储文件中提取出来的。
限制:
祝你编码愉快!
发布于 2011-04-28 04:23:06
如果你想在你的程序中做到这一点,C++可以使用WMI来找到罪魁祸首。
https://stackoverflow.com/questions/5810046
复制相似问题