52

可能重复:
有哪些好的 .NET Profiler?

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

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

是否有人对您乐于推荐的特定工具有任何好的经验?

4

9 回答 9

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 内存分析器

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

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

于 2009-09-25T02:55:16.490 回答
32

奇怪的是这里还没有提到CLR Profiler 。它是免费的并且运行良好。

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

于 2011-06-16T12:50:41.827 回答
8

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

于 2009-09-25T02:59:56.713 回答
6

我本人是JetBrains Profiler的忠实粉丝

于 2008-12-30T09:26:49.140 回答
5

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

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

于 2008-12-30T09:23:37.617 回答
5

我第二个ANTS profiler

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

而且我喜欢在执行时间过长的代码行上淹没小的进度条。

于 2008-12-30T11:25:15.813 回答
4

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

于 2008-12-30T09:47:07.087 回答
4

由于每个人都列出了可用的工具,我想我会指出你的 .NET 分析器的完整列表:http: //sharptoolbox.com/categories/profilers-debuggers

您会在此处找到此处建议的工具和所有其他工具,每个工具都有其建议的简短描述。

于 2009-10-23T09:12:25.117 回答
1

多年来,我使用Aqtime取得了巨大成功。我尝试了 ANTS 和其他人,但又回到了 Aqtime,因为我也在非托管代码中进行了大量开发。

于 2009-01-03T12:03:45.503 回答