什么是一些好的.NET Profiler?


374

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

Answers:


285

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

dotTrace与Resharper集成在一起,这非常方便,因为您可以通过一次单击IDE来配置单元测试的性能。但是,dotTrace似乎经常给出虚假的结果(例如,说一种方法要花几年时间才能运行)

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

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

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

.NET内存配置文件只需要免费的Microsoft CLR Profiler(.Net Framework 2.0 / .Net Framework 4.0)。

2011年更新:

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

在过去的几年中,ANTS探查器取得了突飞猛进的发展,其内存探查器具有一些真正有用的功能,据我估计,它现在已经超越了dotTrace。我很幸运地获得了两者的许可证,但是如果您要购买一个同时具有性能和内存性能的.Net分析器,请将其设为ANTS。


5
Visual Studio中的探查器也非常易于使用,Visual Studio 2010是Beta版,因此也是免费的。2010年对查看争用和并发进行了多项增强。尝试...
Rick

15
@Rick不幸的是,Visual Studio的探查器没有出现在Professional Edition中...
Drake

我非常不同意CLR探查器是.NET内存配置文件所需要的全部内容,尽管如果您不花时间在地上,这可能是正确的。请参阅下面的答案,以获得最佳的内存分析器的摘要-它们帮助您更快地发现内存泄漏和潜在问题。
本·罗宾斯

1
当前版本的EQUATEC Profiler不再免费。
David Schmitt'2

1
似乎EQATEC Profiler再次针对.NET(完整框架)变得免费
soren.enemaerke,2010年

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内存分析器

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

概括地说,我认为ANTS可以帮助您更快地发现泄漏的内容,而Scitech一旦知道了要查看的内容(例如,创建时的堆栈跟踪),就会提供有关整体应用程序内存性能和单个对象的更多详细信息。如果将堆栈跟踪和对未处理的一次性物品的跟踪添加到了ANTS,我将看不到需要使用其他任何东西。


.NET Memory Profiler的4.0版本(现在处于预览状态)现在具有图形视图。这是我在ANTS分析器中喜欢的一项Scitech所没有的功能(在3.1 / 3.5中)。
cplotts 2011年

45

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


尾声

此版本仅可用于非商业用途免费。
乔恩·塞格尔

7
TrolleFar在08年8月写下自己的答案时完全免费。正如乔恩所说,现在,它仅可免费用于非商业用途。
理查德·弗兰斯霍尔特2010年

8
原来,他们再次更改了许可条款。它的部分内容再次免费用于商业用途。
TrolleFar 2010年

自2011年2月起,用于个人/商业用户的.NET普通版免费。这个工具很好,因为它可以在客户端/服务器模型上运行,并且可以分析/绕过重复的边界(例如,可以分析本机-> COM-> NET-> COM-> NET)。用户界面相当糟糕:-)

31

[ 全部披露 ]

尽管还不如此处列出的其他.NET内存分析器功能齐全,但市场上有一个名为JustTrace的新产品。它是由Telerik制作的,其主要目标是使对所有类型的应用程序(Web / Silverlight / Desktop)的跟踪/性能分析变得更加容易和快捷。

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


12
当我去下载并试用时,Telerik希望我“注册”并“创建帐户”。并且所有这些新闻简报订阅按钮均默认选中。我很乐意尝试JustTrace,但如果Telerik如此困难,我将不愿意尝试。
Ryan Lundy

1
感谢您的尝试,Kyralessa。我们知道可以改进流程。我们现在正在努力。我们希望尽快消除这些障碍。现在,只需取消选中相应的框,即可在2分钟内拥有一个帐户并免费下载JustTrace。对不起,短期的麻烦。-T
Todd

9
发回邮件,让我知道何时可以在不创建帐户的情况下进行下载,然后尝试一下。
瑞安·伦迪

4
更新:今天,我可以使用答案中的链接进行下载,而无需创建帐户。
Ryan Lundy'1






9

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

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


7

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

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


1
非常好的工具。易于使用,并允许您浏览对象图。我特别喜欢“实时”内存跟踪。它显示了在应用程序运行期间对象数如何发展。
lowglider

5

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

能够在漏洞修复或增强之前和之后运行性能分析会话,然后对结果进行比较非常有价值,尤其是对于庞大的传统.NET应用程序(例如,在我的案例中),性能从来都不是优先考虑因素,并且可能会发现瓶颈非常乏味。进行前后差异比较后,您可以查看每种方法的调用计数变化每种方法持续时间变化

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

底线:dotTrace效果很好,并且差异非常宝贵。




3

当前版本的SharpDevelop(3.1.1)具有不错的集成分析器。它非常快,并且可以很好地集成到SharpDevelop IDE及其NUnit运行器中。结果以灵活的树/列表样式显示(使用LINQ创建自己的选择)。双击显示的方法将直接跳至源代码。


2

我过去曾与RedGate的探查器一起工作过。为我做了工作。


2

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


1
我使用过dotTrace并可以推荐它。
乔恩·斯基特

2

我怀疑Visual Studio Team System附带的探查器是否是最好的探查器,但是我发现它在许多场合都足够好。除了VS提供的功能之外,您还需要什么?

编辑:不幸的是,它仅在VS Team System中可用,但是如果您可以访问它,则值得签出。


1
我在VS2008中谈论过一个,但可能并非在所有版本中都可用(我正在使用VSTS)。从PDC2008视频来看,探查器似乎将在VS2010中得到很大改进。
Brian Rasmussen

1
该探查器仅在Visual Studio的Team Systems版本中可用。
克里斯·布兰德斯玛

Visual Studio Team System(开发人员版)具有一个探查器。请参阅< microsoft.com/visualstudio/en-us/products/teamsystem/… >。
gix

自VS 2005开始,Visual Studio就拥有一个探查器。仅Team System才提供。那就是,事实上,我使用团队系统的原因(在工作中我有专业人员)。我认为这是一个非常好的分析器。
配置器

它是一个很好的探查器,但是还不能完全符合新版A​​NTS的标准。
mqp

2

最新版本的ANTS内存分析器(我认为是5)简直是摇摇欲坠!!!我一直在使用WinDbg和SOS来解决泄漏问题,因为事实证明这是最好的方法,然后我尝试使用ANTS并在几分钟之内得到了解决方案。真的是一个很棒的软件。


2

我想添加yourkit java和.net profiler,我很喜欢Java,但是还没有尝试.NET版本。


1

不幸的是,我尝试使用的大多数探查器在与尾部调用一起使用时均失败了,最著名的是ANTS。我最终写了我自己的。在CodeProject上有一个简单的实现,可以用作基础。



1

我必须带给我一个令人惊奇的工具,我曾用过一段时间。AVICode Interceptor Studio。在我之前的公司中,我们使用了这个出色的工具来描述Web应用程序这应该是世界上最大的Web应用程序,也是有史以来最大的民用IT项目)。表演团队在这个宏伟的工具的帮助下创造了奇迹。配置它很痛苦,但这是一次性的活动,我会说值得。请查看此页面以获取详细信息。

谢谢,詹姆斯


1

对我而言,SpeedTrace是市场上最好的工具,因为它不仅可以帮助您发现应用程序内部的瓶颈。它还可以帮助您进行故障排除,以找出应用程序崩溃的原因,未安装安装程序,应用程序挂起,应用程序性能有时不佳(取决于数据输入),例如,识别慢速的数据库事务。



1

如果许可问题,您可以尝试使用WINDBG进行内存分析


1

NuMega True Time事件探查器由Micro Focus保留在DevPartner Studio中。它为仅需要PDB的.NET应用程序提供行和方法级别的详细信息,而无需任何源代码(但有帮助)。它可以使用我们专有的每线程内核模式定时驱动程序来区分算法繁琐的例程和I / O等待时间长的例程。10.5版在2011年2月4日提供了新的64进程支持。无耻的插件:我在DevPartner产品线上工作。跟进 http://www.DevPartner.com,以了解有关10.5发布的新闻。

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


欢迎来到。您将需要披露与DevPartner的任何关系,否则您将被视为垃圾邮件发送者并以此进行处理。我看到您已经回答了许多概要分析问题...
John Saunders

0

我在使用C的大型C#应用程序中发现了很多问题 this

通常,问题是在启动或关闭过程中发生,因为正在加载插件,并且正在创建,销毁,序列化或反序列化大数据结构。通常,它们多次创建和初始化,并且更改处理程序被添加多次,从而使问题更加复杂。

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


0

我们选择了.NET中的YourKit Profiler for .NET,因为它具有最高的性价比(价格与功能)。对于想要拥有灵活许可(浮动许可)的小型公司而言,这是一个完美的选择-当时的ANTS曾是开发人员席位。

此外,它还为我们提供了附加到运行过程的功能,这是dotTrace无法实现的。请注意,虽然连接不是最佳选择,因为.NET会减慢所有速度,但这是分析其他进程启动的.NET应用程序的唯一方法。在功能方面,ANTS和dotTrace更好-但最终YourKit足够好。


从2012年1月开始,YourKit提高了YourKit分析器的价格。因此,价格优势可能不再有效。

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.