.NET内存分析工具

nic*_*lot 50 .net profiling memory-profiling

可能重复:
什么是一些好的.NET Profilers?

我正在寻找好的.NET CLR内存分析工具.

我的关键要求是它将与IIS和独立的CLR应用程序配合良好.理想情况下,我会看到分配了哪些对象,分配它们的位置以及它们的大小?

有没有人对您推荐的特定工具有任何良好的体验?

Ben*_*ins 45

我目前正在评估Scitech .NET Memory Profiler 3.1ANTS Memory Profiler 5.1.我一年或两年前尝试过JetBrains,它不如ANTS好,所以这次我没有打扰过.从阅读网站看起来它对内存分析不如其他两个好.

ANTS和Scitech内存分析器都具有另一个没有的功能,因此最好取决于您的偏好.一般来说,Scitech提供更详细的信息,而ANTS在识别泄漏对象方面确实令人难以置信.总的来说,我更喜欢ANTS,因为它可以快速识别可能的泄漏.

以下是我的经验中各自的优缺点:

ANTS和Scitech .NET Memory Profiler的共同特征

  • 实时分析功能
  • 在他们的网站上优秀的操作视频
  • 使用方便
  • 合理的性能(明显慢于没有附加分析器,但没有那么多你变得沮丧)
  • 显示泄漏对象的实例
  • 基本上他们都做得很好

蚂蚁

  • 一键式过滤器可以找到常见的泄漏,包括:仅由事件处理程序保持活动的对象,处置但仍处于活动状态的对象以及仅通过来自已处置对象的引用保持活动的对象.这可能是ANTS的杀手级特征 - 因此发现泄漏的速度非常快.根据我的经验,大多数泄漏是由事件处理程序没有解开而引起的,ANTS只是直接带你到这些对象.真棒.
  • 对象保留图.虽然Scitech提供相同的信息,但在ANTS中解释起来要容易得多.
  • 除了对象本身的大小外,还显示包含子项的大小(但仅在不幸地选择实例时,而不是在整个类列表中).
  • 更好地集成到Visual Studio(右键单击图形以跳转到文件)

Scitech .NET Memory Profiler

  • 分配对象时显示堆栈跟踪.这对于在许多不同位置分配的对象非常有用.使用ANTS很难确定泄漏对象的确切位置.
  • 显示未处理的一次性物体的数量.虽然没有表明泄漏,但它确实找到了解决此问题的机会,并通过更快的垃圾收集提高了应用程序性能.
  • 更详细的过滤选项(可以独立过滤多个列).
  • 提供有关创建的总对象的信息(包括收集的垃圾).ANTS仅显示"实时"对象统计信息.这使得分析和调整整体应用程序性能变得更加容易(例如,识别不必要地创建大量不一定泄漏的对象的位置).

总而言之,我认为ANTS可以帮助您更快地找到泄漏的内容,而Scitech会在您知道要查看的内容(例如,创建时的堆栈跟踪)后提供有关整体应用程序内存性能和单个对象的更多详细信息.如果堆栈跟踪和跟踪未处置的一次性对象被添加到ANTS我不会看到需要使用其他任何东西.


Cra*_*ntz 31

奇怪的是CLR Profiler还没有在这里提到.它是免费的,效果很好.

请注意Microsoft自己的站点提供的多个旧版本.截至2011年11月,最新版本似乎是这一个:最新版本 (备用链接)

  • D'哦!好的补充. (2认同)
  • 似乎项目现在托管在codeplex上,以及最新下载:http://clrprofiler.codeplex.com/ (2认同)

X-C*_*bed 8

如果您感到非常绝望,可以将WinDbg .Net框架附带的Son-of-Strike库(SOS.DLL)一起使用.

  • 实际上,这对于真正模糊的内存问题更有用,例如当你在非显而易见的地方持有引用时 (2认同)

jfs*_*jfs 5

.Net Memory Profiler在我之前的项目中帮了我很多忙.这不是免费的,但它非常好.

.NET Memory Profiler是一个功能强大的工具,用于查找内存泄漏并优化用C#,VB.NET或任何其他.NET语言编写的程序中的内存使用情况.


dma*_*kic 5

我是第二个ANTS分析器.

除了显示您需要的所有内容之外,它还将绘制简单的图形,您可以在其中查看执行时间最长的内容以及内存的内容.当您单击graphp时,它将显示代码中的相应行.

我喜欢在代码行上淹没的litle进度条,执行时间太长.