关于C#:什么是好的.NET分析程序?

What Are Some Good .NET Profilers?

使用.NET程序时使用了哪些配置文件,您特别推荐哪种配置文件?


我广泛使用了JetBrains Dottrace和Redgate蚂蚁。它们在功能和价格上相当相似。它们都提供了有用的性能分析和非常基本的内存分析。

Dottrace与Resharper集成,这非常方便,因为您可以通过从IDE中单击一次来分析单元测试的性能。然而,dottrace通常会给出虚假的结果(例如,说一个方法需要几年的运行时间)

我更喜欢蚂蚁呈现分析结果的方式。它向您显示源代码,并且在每行的左边告诉您运行它需要多长时间。dottrace只有一个树视图。

eqatec探查器非常基本,它要求您编译程序集的特殊检测版本,然后可以在eqatec探查器中运行这些版本。然而,它是免费的。

总的来说,我更喜欢使用Ants进行性能分析,尽管如果您使用Resharper,那么Dottrace的集成是一个杀手级的特性,意味着它在可用性方面胜过了Ants。

免费的Microsoft CLR探查器(.NET Framework 2.0/.NET Framework 4.0)是.NET内存分析所需的全部功能。

2011更新:

Scietech内存分析器有一个相当基本的用户界面,但是有很多有用的信息,包括一些关于dottrace和ants所缺少的非托管内存的信息——如果您正在进行COM互操作,您可能会发现它很有用,但是我还没有找到任何分析器,可以使COM内存问题易于诊断——您通常需要分解windbg.exe

在过去的几年中,Ants分析器有了突飞猛进的发展,并且它的内存分析器有一些真正有用的特性,在我的估计中,这些特性将它作为一个包推到了dottrace的前面。我很幸运有两个的许可证,但是如果你想买一个性能和内存的.NET分析器,那就让它成为蚂蚁吧。


其他人已经介绍了性能分析,但是关于内存分析我目前正在评估scitech.net内存分析器3.1和ants内存分析器5.1(截至2009年9月的当前版本)。我在一两年前尝试过JetBrains,但效果不如蚂蚁(用于记忆分析),所以这次我不担心。从阅读网站来看,它不像其他两个网站那样具有相同的内存分析功能。

蚂蚁和科学技术内存分析器都有另一个没有的特性,所以哪一个最好将取决于您的偏好。一般来说,科技一号提供了更详细的信息,而蚂蚁一号在识别泄漏的物体方面确实令人难以置信。总的来说,我更喜欢蚂蚁一号,因为它能很快识别可能的泄漏。

根据我的经验,每种方法的主要优点和缺点如下:

蚂蚁和科学技术.NET内存分析器的常见功能

  • 实时分析功能
  • 他们网站上的优秀操作视频
  • 易于使用
  • 合理的性能(明显比没有附加分析器慢,但不会让您感到沮丧)
  • 显示泄漏对象的实例
  • 基本上他们都做得很好

蚂蚁

  • 单击筛选器可查找常见泄漏,包括:仅由事件处理程序保持活动状态的对象、已释放但仍活动的对象以及仅由已释放对象的引用保持活动状态的对象。这可能是蚂蚁的致命特征——因此,发现泄漏的速度非常快。在我的经验中,大多数泄漏都是由于事件处理程序没有被解开而导致的,而蚂蚁只是直接把您带到这些对象。令人惊叹的。
  • 对象保持图。虽然在科学技术中也有同样的信息,但用蚂蚁来解释要容易得多。
  • 除了对象本身的大小之外,还显示子对象的大小(但仅当不幸地选择了实例时,不在整体类列表中)。
  • 更好地集成到Visual Studio(右键单击图形以跳转到文件)

科学技术.NET内存分析器

  • 在分配对象时显示堆栈跟踪。这对于在许多不同位置分配的对象非常有用。对于蚂蚁来说,很难准确地确定泄漏物体的创建位置。
  • 显示未释放的可释放对象的计数。虽然不表示存在泄漏,但它确实发现了通过更快的垃圾收集来解决此问题和提高应用程序性能的机会。
  • 更详细的筛选选项(可以独立筛选多个列)。
  • 显示有关已创建的对象总数(包括已收集的垃圾)的信息。蚂蚁只显示"实时"对象统计信息。这使得分析和调整整个应用程序性能变得更容易(例如,确定在哪里不必要地创建了许多不需要泄漏的对象)。

总结一下,我认为Ants可以帮助您更快地发现泄漏的内容,而一旦您知道要查看什么(例如,创建时的堆栈跟踪),Scitech就可以提供关于整个应用程序内存性能和单个对象的更多详细信息。如果将不确定的一次性对象的堆栈跟踪和跟踪添加到蚂蚁中,我就不需要使用其他任何东西。


我最近发现了eqatec profiler http://www.eqatec.com/tools/profiler。它适用于大多数.NET版本和许多平台。它很容易使用,部分是免费的,甚至是商业用途。


[全面披露]

虽然还没有这里列出的其他一些.NET内存分析程序那么全面,但市场上有一个新的条目,叫做justtrace。它是由Telerik开发的,它的主要目标是使所有类型的应用程序(web/silverlight/desktop)的跟踪/分析更加容易和快速。

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


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


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


蚂蚁剖析器。我用的不多,但我对蚂蚁没有什么抱怨。可视化非常有用。


如果你在寻找快速、简单和免费的东西,http://code.google.com/p/slimtune/似乎做得很好。


自动化的qa aqtime用于计时,以及用于内存的scietech memprofiler。


我一直在为WinForms和控制台应用程序开发JetBrains Dottrace(还没有在ASP.NET上测试过),它工作得很好:

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


别忘了了不起的科学技术.NET内存分析器

这对于跟踪.NET应用程序内存不足的原因非常有用。


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

能够在错误修复或增强之前和之后运行分析会话,然后将结果进行比较是非常有价值的,特别是与庞大的传统.NET应用程序(如我的例子)相比,性能从来都不是优先考虑的问题,在那里发现瓶颈可能非常麻烦。执行前后差异允许您查看每个方法的调用计数的变化以及每个方法的持续时间的变化。

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

底线:dottrace工作得很好,diff非常宝贵。


aqtime是合理的,但有一点学习曲线,并不像内置的一组套件那样容易使用。


目前发布的SharpDevelop(3.1.1)有一个很好的集成分析器。它的速度相当快,并且很好地融入了Sharpdevelopment IDE及其Nunit Runner。结果以灵活的树/列表样式显示(使用LINQ创建自己的选择)。双击显示的方法直接跳到源代码中。


在过去,我使用了Visual Studio团队系统附带的探查器。


我想添加YouKIT Java和.NET剖析器,我喜欢Java,但是没有尝试.NET版本。


我以前曾与Redgate的Profiler合作过。为我做了这项工作。


我自己没试过,但可能是Dottrace?他们的Resharper应用程序当然是一个很好的应用程序。也许dottrace也是:)


最新版本的蚂蚁内存分析器(我想是5个)简直太棒了!!!!我一直在用windbg和sos来处理漏洞,因为这是以前最好的方法,然后我尝试了蚂蚁,几分钟后就成功了。真是个很棒的软件。


我怀疑Visual Studio团队系统附带的探查器是最好的探查器,但我发现它在很多情况下都足够好。除了VS提供的服务之外,您还需要什么?

编辑:不幸的是,它只在vs团队系统中可用,但如果您有权访问它,则值得签出。


如果许可是一个问题,您可以尝试windbg进行内存分析


我最近一直在测试Telerik的Justtrace,虽然它离成品很远,但他们的方向是正确的。


Numega Real Time Profiler通过Micro Focus在DevPartner Studio中继续运行。它为只需要PDB的.NET应用程序提供了行和方法级别的详细信息,不需要任何源代码(但它有帮助)。它可以使用我们专有的线程内核模式计时驱动程序区分算法重的例程和I/O等待时间长的例程。版本10.5于2011年2月4日提供新的64进程支持。无耻的插件:我在DevPartner产品线工作。在http://www.devpartner.com上跟进10.5发布的新闻。

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


对我来说,speedtrace是市场上最好的工具,因为它不仅可以帮助您在应用程序中找到瓶颈。它还可以帮助您在故障排除方案中找出应用程序崩溃、安装程序未安装、应用程序挂断、应用程序性能有时较差的原因,具体取决于数据输入,例如,为了识别较慢的DB事务。


英特尔?VTune?快速采样性能分析仪


我必须带一个神奇的工具给你看,这是我以前用过的。Avicode拦截器工作室。在我以前的公司中,我们使用这个出色的工具来分析Web应用程序(这应该是世界上最大的单个Web应用程序,也是有史以来最大的民用IT项目)。在这个出色的工具的帮助下,性能团队创造了奇迹。配置它是一件痛苦的事情,但这只是一次性的活动,我想说这是值得的。签出此页以获取详细信息。

谢谢,詹姆斯


不幸的是,我尝试过的大多数侧写器在与尾叫一起使用时都失败了,尤其是蚂蚁。最后我自己写了。在代码项目上有一个简单的实现,可以作为基础使用。


如果您使用的是ASP.NET MVC,则可以尝试MVCMiniprofiler(http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)


我们选择了yourkit profiler for.net作为我们公司的最佳价值(价格与功能)。对于一个希望拥有灵活许可(浮动许可)的小公司来说,这是一个完美的选择——蚂蚁当时是开发人员的座位锁。

此外,它还为我们提供了附加到正在运行的进程的能力,而这在Dottrace中是不可能实现的。尽管附加不是最好的选择,因为.NET会减慢速度,但这是分析由其他进程启动的.NET应用程序的唯一方法。从功能上看,蚂蚁和dottrace比较好,但最终你的软件已经足够好了。


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

通常,问题发生在启动或关闭过程中,因为插件正在被加载,大数据结构正在被创建、销毁、序列化或反序列化。通常,它们被创建和初始化多次,更改处理程序被添加多次,进一步加剧了问题。

在这种情况下,程序可能非常缓慢,只有2个样本足以精确定位有罪的方法/函数/属性调用站点。