什么是一些好的.NET分析器?

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

我广泛使用了JetBrains dotTrace和Redgate ANTS 。 它们在function和价格上相当类似。 他们都提供有用的性能分析和相当基本的内存分析。

dotTrace与Resharper集成在一起,这非常方便,您可以从IDE中单击一下unit testing的性能。 然而,dotTrace通常似乎给出了虚假的结果(例如说一种方法需要几年的时间才能运行)

我更喜欢ANTS呈现分析结果的方式。 它显示了你的源代码,每行的左边告诉你运行需要多长时间。 dotTrace只是有一个树形视图。

EQATEC分析器是非常基础的,需要你编译你的程序集的特殊仪器版本,然后可以在EQATEC分析器中运行。 但是,这是免费的。

总的来说,我更喜欢ANTS的性能分析,但如果你使用Resharper,那么dotTrace的整合是一个杀手级的function,意味着它在可用性方面比ANTS好。

所有您需要用于.NET内存分析的免费Microsoft CLR Profiler( .Net Framework 2.0 / .Net Framework 4.0 )。

2011更新:

Scitech内存分析器有一个相当基本的用户界面,但很多有用的信息,包括一些关于非托pipe内存的信息,dotTrace和ANTS缺乏 – 如果你正在做COM互操作,你可能会觉得这很有用,但是我还没有find任何使得COM内存问题很容易诊断 – 你通常必须打破windbg.exe

ant探查器在过去的几年里有了突飞猛进的发展,其内存分析器有一些真正有用的function,现在推动它在dotTrace之前。 我很幸运能够拥有两者的许可证,但是如果您打算购买一个.Net性能和内存分析器,请将其作为ANTS。

其他人已经介绍了性能分析,但是关于内存分析,我目前正在评估Scitech .NET Memory Profiler 3.1和ANTS Memory Profiler 5.1(截至2009年9月的最新版本)。 我曾经在一两年前试过JetBrains,而且还不如ant(用于记忆分析),所以我没有打扰过这次。 从阅读网站看来,它没有与其他两个相同的内存分析function。

ant和赛特内存分析器都具有其他function,所以最好取决于您的喜好。 一般来说,Scitech提供了更详细的信息,而ANTS在识别泄漏物体方面真的不可思议。 总的来说,我更喜欢ant,因为它很快找出可能的泄漏。

以下是我的经验的主要优点和缺点:

ant和Scitech .NET内存分析器的共同特点

  • 实时分析function
  • 在他们的网站上出色的指导video
  • 使用方便
  • 合理的性能(明显慢于没有附带的轮廓仪,但不是太多,你变得沮丧)
  • 显示泄漏对象的实例
  • 基本上他们都做得很好

ant

  • 一键式filter可以发现常见的泄漏,包括:仅由事件处理程序保持活动状态的对象,处置但仍处于活动状态的对象以及仅通过处置对象的引用保持活动状态的对象。 这可能是ANTS的杀手锏 – 发现泄漏的速度非常快,因为这个。 根据我的经验,大部分的泄漏事件都是由事件处理程序不能脱钩引起的,ANTS只是直接引导这些对象。 真棒。
  • 对象保留图。 虽然在Scitech中有相同的信息,但在ANTS中解释要容易得多。
  • 除了对象本身的大小之外,还显示子对象的大小(但仅在不幸select了实例时,不在总体类列表中)。
  • 更好地集成到Visual Studio(右键单击graphics跳转到文件)

Scitech .NET内存分析器

  • 显示对象分配时的堆栈跟踪。 这对于在很多不同地方分配的对象来说非常有用。 有了ANTS,就很难准确确定泄漏物体的创build位置。
  • 显示未处理的一次性物品的数量。 尽pipe没有泄露的迹象,但确实有机会解决这个问题,并通过更快速的垃圾收集来提高应用程序的性能。
  • 更详细的过滤选项(几列可以独立过滤)。
  • 呈现所创build对象的信息(包括收集的垃圾)。 ANTS只显示“实时”对象统计。 这样可以更轻松地分析和调整整体应用程序的性能(例如,识别不必要地创build的大量对象,这些对象不一定会泄漏)。

总而言之,我认为ANTS可以帮助您更快find泄漏的地方,而一旦您知道要查看哪些内容(例如创build堆栈跟踪),Scitech会提供关于您的整体应用程序内存性能和单个对象的更多细节。 如果堆栈跟踪和未处理的一次性对象的跟踪添加到ant,我不会看到需要使用任何东西。

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

[ 完全披露 ]

尽pipe还没有像这里列出的其他一些.NET内存configuration文件那样function全面,但市场上还有一个名为JustTrace的新function 。 它是由Telerik制作的,主要目标是使跟踪/分析更容易,更快速地适用于所有types的应用程序(web / Silverlight /桌面)。

如果你曾经发现过使用其他工具进行性能分析和优化,那么JustTrace可能值得一看。

不要忘记nProf – 一个非常好的免费软件分析器。

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

ant探查器 。 我没有用过很多,但是我对ANTS没有任何的抱怨。 可视化真的很有帮助。

AutomatedQA AQTime用于计时, SciTech MemProfiler用于记忆。

如果您正在寻找快速,简单和免费的内容, http://code.google.com/p/slimtune/似乎能够完成这项工作。

我一直在使用JetBrains的DotTrace for WinForms和控制台应用程序(尚未在ASP.net上testing过),它工作得很好:

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

不要忘记真棒scitech .net内存分析器

追踪为什么你的.net应用程序内存不足将会很好。

我会补充说dotTrace能够区分内存和性能跟踪会话是非常宝贵的(ant也可能有一个内存比较function,但我没有看到性能差异)。

在错误修复或增强之前和之后运行分析会话,然后比较结果是非常有价值的,特别是对于一个庞大的遗留.NET应用程序(在我的情况下),性能从来不是优先事项,寻找瓶颈可能是非常乏味。 做前后diff可以让你看到每种方法的呼叫计数 变化以及每种方法的持续时间变化

这不仅对代码更改有帮助,而且对于每个客户/客户都有一个使用不同数据库的应用程序也是有帮助的。 如果一个客户抱怨速度缓慢,那么可以使用他们的数据库运行性能分析会话,并将结果与​​“快速”数据库进行比较,以确定哪些操作导致缓慢。 当然还有很多数据库方面的性能工具,但是有时我真的可以帮助从应用程序方面看性能指标(因为这更接近用户实际看到的)。

底线:dotTrace的伟大工程,差异是无价的。

AQTime是合理的,但有一点点的学习曲线,并不像Team Suite中内置的那样容易使用

在过去,我使用了Visual Studio Team System附带的剖析器。

SharpDevelop(3.1.1)的当前版本有一个很好的集成分析器。 它非常快速,并且很好地集成到了SharpDevelop IDE和它的NUnit运行器中。 结果以灵活的Tree / List风格显示(使用LINQ创build您自己的select)。 双击显示的方法直接跳转到源代码。

我曾经在RedGate的分析器上工作过。 做了我的工作。

还没有尝试过自己,但也许dotTrace ? 他们的ReSharper应用程序当然是一个很好的应用程序。 也许dotTrace也是:)

我怀疑Visual Studio Team System提供的分析器是最好的分析器,但是我发现它在很多情况下都足够好了。 除了VS提供什么外,你需要什么?

编辑:不幸的是,它只在VS团队系统中可用,但如果你有权访问,这是值得检查。

ant记忆分析器的最新版本(我认为它是5)只是石头! 使用WinDbg和SOS之后,我感到困惑,因为它被certificate是以前最好的方法,于是我尝试了ANTS,并在几分钟之内就得到了它。 真的是一个精彩的一块软件。

我想添加yourkit java和.net分析器,我喜欢它的Java,还没有尝试.NET版本。

不幸的是,大多数我试过的configuration文件在使用尾部呼叫时失败,最显着的是ANTS。 我只是最终写我自己的。 CodeProject上有一个简单的实现,可以用作基础。

英特尔®VTune™性能分析器可快速进行采样

我必须把一个惊人的工具带到你注意到我曾经用过的东西。 AVICode Interceptor Studio 。 在我以前的公司,我们使用这个奇妙的工具来分析networking应用程序这应该是世界上最大的单一Web应用程序和有史以来最大的民用IT项目 )。 表演队在这个macros伟的工具的帮助下创造了奇迹。 这是一个痛苦的configuration,但这是一次性活动,我会说这是值得的时间。 有关详细信息,请查看此页面 。

谢谢,詹姆斯

对我来说,SpeedTrace是市场上最好的工具,因为它不仅帮助您find应用程序的瓶颈。 它还可以帮助您排除故障情况,找出应用程序崩溃的原因,您的设置没有安装,应用程序挂起,应用程序性能有时很差,这取决于数据input,例如识别缓慢的数据库事务。

我最近一直在testingTelerik的JustTrace,虽然它远离成品,但是他们正朝着正确的方向前进。

如果授权是一个问题,您可以尝试使用WINDBG进行内存分析

NuMega True Time剖析器由Micro Focus在DevPartner Studio中存在。 它为.NET应用程序提供了线程和方法级别的详细信息,只需要PDB,不需要任何源代码(但是有帮助)。它可以区分使用我们专有的每线程内核模式时序驱动程序的algorithm繁重的例程与具有长I / O等待的程序。 版本10.5在2011年2月4日提供新的64进程支持。无耻插件:我在DevPartner产品线上工作。 在http://www.DevPartner.com上跟进10.5发布的消息。

免责声明:我是Micro Focus的DevPartner的产品经理。

我在一个大的C#应用​​程序中发现了很多问题。

通常,问题发生在启动或closures期间,因为插件正在被加载,大数据结构正在被创build,销毁,序列化或反序列化。 通常他们被创build和初始化不止一次,更改处理程序被添加多次,进一步复杂的问题。

在这样的情况下,程序可能会很慢,只有2个样本足以查明有罪的方法/function/财产的电话网站。

我们select了YourKit Profiler for .NET,因为它是最好的价格(价格与function)。 对于一个想要灵活许可(浮动许可证)的小公司来说,这是一个完美的select – 当时,ANTS是开发人员的座位。

而且,它使我们能够附加到dotTrace无法实现的运行过程。 请注意,尽pipe附件并不是.NET的最佳select,但是这是分析由其他进程启动的.NET应用程序的唯一方法。 function上,ant和dotTrace更好 – 但最后YourKit是足够好的。

如果你在ASP.NET MVC上,你可以试试MVCMiniProfiler(http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)