根据任务管理器,我有一个进程保存了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对象有关,而不是非托管内存。绿色锯齿曲线,只是一个加载/卸载的时间线。出于某些原因,我第一次采取的措施是完全错误的:
所以我的计划是:
发布于 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对象的详细信息。
发布于 2012-03-23 08:14:45
我推荐SciTech .NET内存分析器。该工具主要用于分析.NET内存使用情况,例如查找.NET内存泄漏或识别内存压力较大的区域。虽然它不是它的主要用途,但它还有一个更简单的本机内存显示,包括每个加载库的JIT代码大小。我相信你能找到这120 MB的信息来自哪里。
发布于 2012-03-23 08:55:02
我使用RedGate ANTS .NET开发人员束来解决这些问题。内存分析器允许识别内存泄漏(如僵尸对象),并生成内存使用的快照。然后,您将能够比较两个快照之间的类和实例。您可以在树中跟踪实例引用,并轻松查看维护引用的顶级对象。
此外,Performance还提供代码分析来识别瓶颈和CPU使用情况。
多年来,它帮助我们在几分钟内发现应用程序问题。
https://stackoverflow.com/questions/9793391
复制相似问题