一些好的.NET性能分析工具是什么?

373

你在使用.net程序时用过哪些性能分析工具?你特别推荐哪个?

30个回答

284

我曾广泛使用JetBrains dotTraceRedgate ANTS。它们在功能和价格方面都相当类似。它们都提供有用的性能分析和相当基本的内存分析。

dotTrace与Resharper集成,这真的很方便,因为你可以通过IDE一键对单元测试进行性能分析。然而,dotTrace经常给出虚假结果(例如说一个方法运行了几年)。

我更喜欢ANTS呈现性能分析结果的方式。它显示源代码,并在每行左边告诉你运行时间。dotTrace只有树形视图。

EQATEC profiler相当基本,需要你编译特殊的程序集版本,然后在EQATEC profiler中运行。不过,它是免费的。

总的来说,我更喜欢ANTS用于性能分析,尽管如果你使用Resharper,那么dotTrace的集成是一个杀手级功能,这意味着它在可用性方面优于ANTS。

免费的Microsoft CLR Profiler(.Net framework 2.0 / .Net Framework 4.0)是.NET内存分析所需要的全部。

2011更新:

Scitech memory profiler界面相当基本,但提供许多有用的信息,包括一些关于非托管内存的信息,dotTrace和ANTS缺乏这方面的信息。如果你正在进行COM互操作,你可能会发现它很有用,但我还没有找到任何可以轻松诊断COM内存问题的分析器-通常需要使用windbg.exe

在过去的几年里,ANTS性能分析器取得了长足的进步,其内存分析工具现在拥有一些真正有用的功能,这使得它在我的评估中超过了dotTrace。我很幸运拥有这两种工具的许可证,但如果您要购买一种既可以进行性能分析又可以进行内存分析的.Net性能分析器,请选择ANTS。


5
Visual Studio 中的性能分析器非常易于使用,Visual Studio 2010 目前处于 Beta 版本,因此免费。在 2010 版本中,有多项改进可用于查看争用和并发。不妨一试…… - Rick
15
很遗憾,Visual Studio的分析器不包含在专业版中。 - Drake
1
EQUATEC性能分析器的当前版本不再免费。 - David Schmitt
1
看起来EQATEC Profiler又可以免费使用于.NET(完整框架)了。 - soren.enemaerke
EQATEC Profiler现在在所有平台上都是免费的,但有一些DLL限制:桌面、CF、Silverlight和WP7。它仍然是唯一支持所有.NET 2.0+平台的分析工具。 - Richard Flamsholt
显示剩余5条评论

88

关于内存分析,其他人已经介绍了性能分析,但我目前正在评估Scitech .NET Memory Profiler 3.1和ANTS Memory Profiler 5.1(截至2009年9月的当前版本)。我一两年前尝试过JetBrains,但对于内存分析而言它不如ANTS(好用),所以这次我没有再尝试。从阅读网站上的信息来看,它似乎没有与其他两个工具相同的内存分析功能。

ANTS和Scitech内存分析器都有彼此没有的特性,因此哪一个更好取决于您的喜好。总的来说,Scitech提供了更详细的信息,而ANTS在识别泄漏对象方面非常出色。总体而言,我更喜欢ANTS,因为它很快地识别可能存在的泄漏。

以下是我使用每种工具的主要优缺点:

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

  • 实时分析功能
  • 网站上有非常好的视频教程
  • 易于使用
  • 性能合理(显然比不使用分析器慢,但不会让您感到沮丧)
  • 显示泄漏对象的实例
  • 基本上它们两个都能很好地完成任务

ANTS

  • 一键过滤器可查找常见的泄漏,包括:仅由事件处理程序保持活动状态的对象,已释放但仍然存在的对象以及仅由已释放的对象引用保持活动状态的对象。这可能是ANTS的杀手功能 - 由于此功能,查找泄漏非常快速。根据我的经验,大多数泄漏是由于事件处理程序没有取消挂钩导致的,而ANTS可以直接带你进入这些对象。真棒。
  • 对象保留图。虽然Scitech提供了相同的信息,但在ANTS中更易于解读。
  • 除了对象本身的大小外,还显示其子级的大小(但只有在选择实例时才会显示,不在整个类列表中显示)。
  • 更好地集成到Visual Studio中(右键单击图表以跳转到文件)
  • Scitech .NET Memory Profiler

    • 显示分配对象时的堆栈跟踪。对于在许多不同位置分配的对象非常有用。使用ANTS很难确定泄漏对象的确切创建位置。
    • 显示未处理的可处理对象计数。虽然不能说明泄漏,但可以识别修复此问题的机会并提高应用程序性能,从而加快垃圾回收速度。
    • 更详细的筛选选项(几个列可以独立过滤)。
    • 提供有关总创建对象的信息(包括那些已垃圾回收)。ANTS仅显示“活动”对象统计信息。这使得更容易分析和调整整体应用程序性能(例如,确定在不必要地创建大量对象的位置,这些对象不一定泄漏)。

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


    .NET Memory Profiler 4.0 版本(目前正在预览中)现在具有图形视图。 这是我喜欢的 ANTS profiler 拥有而 Scitech profiler 没有的一个功能(在3.1 / 3.5版本中)。 - cplotts

    45

    我最近发现了EQATEC Profilerhttp://www.eqatec.com/tools/profiler,它适用于大多数.NET版本和许多平台。使用起来很简单,并且其中的一些部分是免费的,即使用于商业用途也可以。


    也在尾调用上失败了 :( 已报告错误。 - leppie
    这个只适用于非商业用途,免费使用。 - Jon Seigel
    7
    在TrolleFar写下他的回答时,也就是在2008年8月份,这个东西是完全免费的。但现在正如Jon所说,它只对非商业用途免费。 - Richard Flamsholt
    8
    事实证明,他们再次修改了许可条款。其中一部分再次免费供商业使用。 - TrolleFar
    截至2011年2月,普通的.NET版自用/商业版是免费的。这个工具很好,因为它采用客户端/服务器模型,并且可以对重复边界进行分析(例如Native->COM->NET->COM->NET可以被分析)。尽管用户界面相当糟糕 :-) - user166390

    31

    [全面披露]

    虽然与其他列在此处的.NET内存分析器相比,它尚未具备同样丰富的功能,但市场上有一款名为JustTrace的新产品。它由Telerik制作,其主要目标是使所有类型的应用程序(Web / Silverlight / Desktop)的跟踪/分析更加容易和快速。

    如果您曾经发现使用其他工具进行分析和优化很令人望而却步或缓慢,则JustTrace可能值得一看。


    12
    当我尝试下载并尝试使用它时,Telerik要求我“注册”和“创建帐户”。而且所有那些新闻通讯订阅按钮都默认为选中状态。如果Telerik让这变得如此困难,我很乐意尝试JustTrace,但不是现在。 - Ryan Lundy
    1
    谢谢您的尝试,Kyralessa。我们知道这个过程可以改进。我们正在努力解决这个问题。我们希望很快能够消除这些障碍。现在,只需取消勾选框,在2分钟内即可拥有一个帐户和免费的JustTrace下载。对于短期的麻烦,我们感到抱歉。-T - Todd
    4
    更新:今天我成功通过回答中的链接下载,无需创建帐户。 - Ryan Lundy

    25

    别忘了 nProf - 一个完全免费的好用性能分析工具。


    3
    看起来有些被遗弃了...只是一个从2006年发布的alpha版本 :-( - Mauricio Scheffer
    2
    对我来说非常好用。现在它是一个Google Code项目。2009年7月发布了一个版本。 - User1
    19
    nProf页面现在声明:NProf不再处于积极开发状态。如果您正在寻找一个开源的.NET分析器,请看一下SlimTune(http://code.google.com/p/slimtune/)。 - Richard Ev

    14

    12

    ANTS Profiler。虽然我没有使用过很多,但我对ANTS没有任何抱怨。它的可视化功能非常有帮助。


    11

    11

    MemProfiler在我们遇到内存泄漏时拯救了我们的团队。我尝试了其他工具,但没有其他工具提供相同的细节。 - oglester

    9

    我一直在使用JetBrains dotTrace来进行WinForms和Console Apps的编程工作(尚未在ASP.net上测试),它的表现相当不错:

    最近他们还添加了“个人许可证”,比企业许可证便宜很多。但是,如果有其他更便宜甚至免费的工具,我也想听听 :-)


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接