.NET内存分析工具

.NET Memory Profiling Tools

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What Are Some Good .NET Profilers?

我正在寻找优秀的.NET CLR内存分析工具。

我的关键要求是它可以很好地与IIS和独立的CLR应用程序配合使用。理想情况下,我会看到分配了哪些对象,它们在哪里分配以及它们的大小?

有没有人对你愿意推荐的特定工具有什么好经验?


我目前正在评估scitech.net内存分析器3.1和ants内存分析器5.1。我在一两年前尝试过JetBrains,但它不如蚂蚁好,所以这次我没有打扰。从阅读网站上看,它不像其他两个网站那样适合内存分析。

蚂蚁和科学技术内存分析器都有另一个没有的特性,所以哪一个最好将取决于您的偏好。一般来说,科技一号提供了更详细的信息,而蚂蚁一号在识别泄漏的物体方面确实令人难以置信。总的来说,我更喜欢蚂蚁一号,因为它能很快识别可能的泄漏。

根据我的经验,每种方法的主要优点和缺点如下:

蚂蚁和科学技术.NET内存分析器的常见功能

  • 实时分析功能
  • 他们网站上的优秀操作视频
  • 易于使用
  • 合理的性能(明显比没有附加分析器慢,但不会让您感到沮丧)
  • 显示泄漏对象的实例
  • 基本上他们都做得很好

蚂蚁

  • 单击筛选器可查找常见泄漏,包括:仅由事件处理程序保持活动状态的对象、已释放但仍活动的对象以及仅由已释放对象的引用保持活动状态的对象。这可能是蚂蚁的致命特征——因此,发现泄漏的速度非常快。在我的经验中,大多数泄漏都是由于事件处理程序没有被解开而导致的,而蚂蚁只是直接把您带到这些对象。令人惊叹的。
  • 对象保持图。虽然在科学技术中也有同样的信息,但用蚂蚁来解释要容易得多。
  • 除了对象本身的大小之外,还显示子对象的大小(但仅当不幸地选择了实例时,不在整体类列表中)。
  • 更好地集成到Visual Studio(右键单击图形以跳转到文件)

科学技术.NET内存分析器

  • 在分配对象时显示堆栈跟踪。这对于在许多不同位置分配的对象非常有用。对于蚂蚁来说,很难准确地确定泄漏物体的创建位置。
  • 显示未释放的可释放对象的计数。虽然不表示存在泄漏,但它确实发现了通过更快的垃圾收集来解决此问题和提高应用程序性能的机会。
  • 更详细的筛选选项(可以独立筛选多个列)。
  • 显示有关已创建的对象总数(包括已收集的垃圾)的信息。蚂蚁只显示"实时"对象统计信息。这使得分析和调整整个应用程序性能变得更容易(例如,确定在哪里不必要地创建了许多不需要泄漏的对象)。

总之,我认为Ants可以帮助您更快地发现泄漏的内容,而一旦您知道要查看什么(例如,创建时的堆栈跟踪),Scitech就可以提供关于整个应用程序内存性能和单个对象的更多详细信息。如果将不确定的一次性对象的堆栈跟踪和跟踪添加到蚂蚁中,我就不需要使用其他任何东西。


奇怪的是,这里还没有提到clr分析器。它是免费的,而且工作得很好。

当心微软自己网站提供的多个旧版本。截至2011年11月,最新版本为:最新版本(备用链接)


如果你真的感到绝望,你可以将windbg与.NET框架附带的strike-library(sos.dll)之子一起使用。


我是JetBrains的忠实粉丝


我是第二个蚂蚁剖析者。

除了显示您需要的所有内容,它还将绘制一个简单的图表,您可以在其中看到执行时间最长的内容,以及占用内存的内容。当您单击graphp时,它将显示代码中的对应行。

我喜欢在代码行中淹没一些进度条,这些代码行执行起来太长了。


.NET内存分析器在我以前的项目中帮助了我很多。这不是免费的,但很好。

.NET Memory Profiler is a powerful
tool for finding memory leaks and
optimizing the memory usage in
programs written in C#, VB.NET or any
other .NET Language.


既然每个人都在列出可用的工具,我想我会向您指出.NET的完整的profiler列表:http://sharptoolbox.com/categories/profilers-debuggers

你会发现这里和其他所有工具都有建议,每个都有一个简短的描述。


我目前正在使用蚂蚁剖析器。它是一个非常好的工具,具有许多分析详细信息选项,可以很好地与独立应用程序、开发服务器和IIS配合使用。


这些年来,我用AQTime取得了巨大的成功。我尝试过蚂蚁和其他方法,但回到了AQTime,因为我在非托管代码中也做了很多开发工作。