首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于分析进程中加载的本机DLL和程序集的内存占用量的工具?

用于分析进程中加载的本机DLL和程序集的内存占用量的工具?
EN

Stack Overflow用户
提问于 2012-03-20 19:14:33
回答 3查看 8.8K关注 0票数 13

根据任务管理器,我有一个进程保存了130 of的内存,根据dotTrace,只有11 of的活动dotTrace对象,所以我想知道其他120 of的内存是怎么回事??

我需要一个工具来列出加载在进程中的程序集和本机DLL,获取进程中图像的大小,并为每个程序集度量方法JITed的内存占用。

来自SysInternal的ListDlls在一定程度上完成了这项工作。但是它并不测量JITed代码的大小,它只提供原始数据。理想情况下,我想要一个UI来分析和总结这些数据。

最近,Visual团队报告说已经使用工具PerfView进行了这样的分析。这在博客文章Visual 11 Beta性能第1部分的章节:最大的VM中有说明。是否有人有使用PerfView分析本机Dlls和程序集占用的经验和反馈?

除了ListDlls和PerfView之外,您还会推荐其他工具吗?

好吧,西蒙·穆里尔建议的VMMAP似乎是更适合这项任务的工具。

VMMAP显示,大部分工作集内存进入托管堆栈(下面为113 to绿色),因此问题更多地与.NET对象有关,而不是非托管内存。绿色锯齿曲线,只是一个加载/卸载的时间线。出于某些原因,我第一次采取的措施是完全错误的:

  • dotTrace告诉我分配了41 me的.NET对象,
  • WMMAP显示180 of的工作集(任务管理器显示类似的数字)
  • WMMAP显示由GC分配的113 GC托管堆。此托管堆内存的90 in位于工作集中:

所以我的计划是:

  1. 确定为什么GC为41 GC的.NET对象分配113 GC的托管堆?(这些数字正常吗?是因为高度的碎裂吗?)
  2. 缩小分配的41 of .NET对象集!
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-23 13:40:31

由于您提到sysinternals的ListDlls,还有另一个名为过程资源管理器的工具,它包含大量的信息,并且比ListDlls要好得多(您希望确保您拥有包含大量.NET信息、支持64位和32位进程等的最新版本)。

对于每个进程,可以同时查看非托管内存(私有字节等)。和托管内存(GC集合、大对象堆等)显示在列中或每个进程中。

sysinternals的另一个很酷的工具是VMMAP。它是一个进程内存分析实用程序,显示了不同类型的虚拟和物理内存类型的细分。

至于120 or问题,您确实希望检查进程中注入的、不属于标准Windows安装或标准DLL进程集的所有非托管DLL。对于如此大的大小分配,我首先跟踪图形组件,当然,因为它们以分配大量内存而闻名(特别是当您谈到像NDepend这样的图形化工具时)。还可以跟踪GDI和用户对象的数量。

关于GDI主题,这里有一个名为GDIView的免费工具,它提供了每个进程分配的GDI对象的详细信息。

票数 5
EN

Stack Overflow用户

发布于 2012-03-23 08:14:45

我推荐SciTech .NET内存分析器。该工具主要用于分析.NET内存使用情况,例如查找.NET内存泄漏或识别内存压力较大的区域。虽然它不是它的主要用途,但它还有一个更简单的本机内存显示,包括每个加载库的JIT代码大小。我相信你能找到这120 MB的信息来自哪里。

票数 0
EN

Stack Overflow用户

发布于 2012-03-23 08:55:02

我使用RedGate ANTS .NET开发人员束来解决这些问题。内存分析器允许识别内存泄漏(如僵尸对象),并生成内存使用的快照。然后,您将能够比较两个快照之间的类和实例。您可以在树中跟踪实例引用,并轻松查看维护引用的顶级对象。

此外,Performance还提供代码分析来识别瓶颈和CPU使用情况。

多年来,它帮助我们在几分钟内发现应用程序问题。

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

https://stackoverflow.com/questions/9793391

复制
相关文章

相似问题

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