什么是一些好的.NET Profilers?

ric*_*ree 374 .net c# profiler profiling

您在使用.net程序时使用了哪些分析器,您会特别推荐哪些?

Mat*_*lls 285

我广泛使用了JetBrains dotTraceRedgate ANTS.它们在功能和价格上非常相似.它们都提供有用的性能分析和非常基本的内存分析.

dotTrace与Resharper集成,这非常方便,因为您只需单击一下IDE即可分析单元测试的性能.然而,dotTrace似乎经常会产生虚假的结果(例如说一个方法需要花费几年时间才能运行)

我更喜欢ANTS呈现分析结果的方式.它向您显示源代码,每行左侧显示运行所需的时间.dotTrace只有树视图.

EQATEC分析器非常基础,需要您编译程序集的特殊检测版本,然后可以在EQATEC分析器中运行.然而,它是免费的.

总的来说,我更喜欢ANTS进行性能分析,但如果你使用Resharper,那么dotTrace的集成是一个杀手级功能,意味着它在可用性方面胜过ANTS.

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

2011年更新:

赛特内存分析器具有相当基本的UI,但很多有用的信息,包括对非托管内存一些资料,dotTrace和蚂蚁缺乏-你可能会发现它有用,如果你正在做的COM互操作,但我还没有找到,使得COM的任何事件探查内存问题易于诊断 - 您通常需要突破windbg.exe.

ANTS分析器在过去几年中实现了跨越式发展,其内存分析器具有一些真正有用的功能,现在它已经超越了dotTrace作为我估计的一个包.我很幸运能获得两者的许可证,但是如果你要为性能和内存购买一个.Net探测器,那就把它变成ANTS吧.

  • @Rick很遗憾专业版中没有Visual Studio的分析器...... (15认同)
  • Visual Studio中的分析器也非常易于使用,Visual Studio 2010处于测试阶段,因此也是免费的.2010年有多项增强功能可用于查看争用和并发.试试吧... (5认同)

Ben*_*ins 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只是直接带你到这些对象.真棒.
  • 对象保留图.虽然Scitech提供相同的信息,但在ANTS中解释起来要容易得多.
  • 除了对象本身的大小外,还显示包含子项的大小(但仅在不幸地选择实例时,而不是在整个类列表中).
  • 更好地集成到Visual Studio(右键单击图形以跳转到文件)

Scitech .NET Memory Profiler

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

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


Tro*_*Far 45

我最近发现了EQATEC Profiler http://www.eqatec.com/tools/profiler.它适用于大多数.NET版本和一堆平台.它易于使用,部分免费,即使是商业用途.

  • 事实证明他们再次更改了许可条款.部分产品可再次免费用于商业用途. (8认同)
  • 08年8月,当TrolleFar写下他的答案时,它完全自由了.现在,正如乔恩所说,它只是免费用于非商业用途. (7认同)

Tod*_*odd 31

[ 完全披露 ]

虽然还没有像这里列出的其他一些.NET内存分析器那样功能齐全,但市场上有一个名为JustTrace的新条目.它由Telerik制作,其主要目标是使所有类型的应用程序(Web/Silverlight /桌面)更容易,更快速地进行跟踪/分析.

如果你曾经发现使用其他工具进行分析和优化令人生畏或放慢速度,那么JustTrace可能值得一看.

  • 当我下载并试用它时,Telerik希望我"注册"并"创建一个帐户".默认情况下,所有这些简报订阅按钮都会被勾选.我很乐意尝试JustTrace,但如果Telerik难以实现这一点,那就不行了. (12认同)
  • 回复并告诉我何时可以在不创建帐户的情况下下载,我会试一试. (9认同)
  • 更新:今天我可以使用答案中的链接下载而无需创建帐户. (4认同)

Gre*_*man 25

不要忘记nProf - 一个完美的好,免费软件分析器.

  • nProf页面现在声明:NProf不再被积极开发.如果您正在寻找开源.NET分析器,请查看SlimTune(http://code.google.com/p/slimtune/) (19认同)
  • 看起来有点被遗弃......只有2006年的alpha发布:-( (3认同)
  • 对我来说很棒.它现在是一个Google Code项目.已于2009年7月发布. (2认同)

Chr*_*nce 14

我发现JetBrains的dotTrace Profiler是.NET的优秀分析工具,它们的ASP.NET模式质量很高.


pal*_*sey 12

ANTS Profiler.我没有用过很多,但我对ANTS没有任何抱怨.可视化非常有用.


Lar*_*ens 11

用于计时的AutomatedQA AQTime和用于内存的SciTech MemProfiler.


Tau*_*ris 11

如果您正在寻找快速,简单且免费的内容,那么http://code.google.com/p/slimtune/似乎可以胜任.


Mic*_*tum 9

我一直在使用JetBrains dotTrace for WinForms和Console Apps(尚未在ASP.net上测试过),它运行良好:

他们最近还增加了一个比公司许可便宜得多的"个人许可".不过,如果有人知道一些更便宜甚至免费的,我也想听听:-)


Sam*_*ron 7

不要忘记令人敬畏的scitech .net内存分析器

它非常适合追踪.net应用程序内存不足的原因.


sha*_*tin 5

我想补充一点,dotTrace的差异内存和性能跟踪会话的能力是绝对无价的(ANTS也可能有内存差异功能,但我没有看到性能差异).

能够在错误修复或增强之前和之后运行概要分析会话,然后比较结果是非常有价值的,特别是对于一个庞大的遗留.NET应用程序(在我的情况下),其中性能从来不是优先考虑的事情,并且找到瓶颈可能是非常乏味.做之前和之后的差异,您可以看到每个方法调用中的计数变化每种方法的持续时间的变化.

这不仅在代码更改期间有用,而且如果您有一个应用程序使用不同的数据库,比如每个客户端/客户.如果一个客户抱怨速度缓慢,您可以使用他们的数据库运行分析会话,并将结果与​​"快速"数据库进行比较,以确定哪些操作导致缓慢.当然,有许多数据库端性能工具,但有时我真的有助于从应用程序端看到性能指标(因为它更接近用户实际看到的).

底线:dotTrace效果很好,差异非常宝贵.