你在使用.net程序时用过哪些性能分析工具?你特别推荐哪个?
我曾广泛使用JetBrains dotTrace和Redgate 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。
关于内存分析,其他人已经介绍了性能分析,但我目前正在评估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
Scitech .NET Memory Profiler
总之,我认为ANTS可以帮助您更快地找出泄漏的内容,而Scitech则提供了关于整体应用程序内存性能和单个对象的更多详细信息,一旦您知道要查看什么内容(例如,创建时的堆栈跟踪)。如果ANTS添加了堆栈跟踪和未处理的可处理对象跟踪,我将不需要使用其他任何工具。
我最近发现了EQATEC Profilerhttp://www.eqatec.com/tools/profiler,它适用于大多数.NET版本和许多平台。使用起来很简单,并且其中的一些部分是免费的,即使用于商业用途也可以。
别忘了 nProf - 一个完全免费的好用性能分析工具。
AutomatedQA AQTime用于计时,SciTech MemProfiler用于内存。
我一直在使用JetBrains dotTrace来进行WinForms和Console Apps的编程工作(尚未在ASP.net上测试),它的表现相当不错:
最近他们还添加了“个人许可证”,比企业许可证便宜很多。但是,如果有其他更便宜甚至免费的工具,我也想听听 :-)