什么是一些好的.NET Profilers?

时间:2008-08-06 20:14:57

标签: c# .net profiling profiler

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

30 个答案:

答案 0 :(得分:285)

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

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

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

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

总的来说,我更喜欢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吧。

答案 1 :(得分: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的杀手级特征 - 因此发现泄漏的速度非常快。根据我的经验,大多数泄漏是由事件处理程序没有解开而引起的,ANTS只是直接带你到这些对象。真棒。
  • 对象保留图。虽然Scitech提供相同的信息,但在ANTS中解释起来要容易得多。
  • 除了对象本身的大小外,还显示包含子项的大小(但仅在不幸地选择实例时,而不是在整个类列表中)。
  • 更好地集成到Visual Studio(右键单击图形以跳转到文件)

Scitech .NET Memory Profiler

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

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

答案 2 :(得分:45)

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

答案 3 :(得分:31)

[Full Disclosure]

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

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

答案 4 :(得分:25)

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

答案 5 :(得分:14)

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

答案 6 :(得分:12)

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

答案 7 :(得分:11)

如果您正在寻找快速,简单且免费的内容,http://code.google.com/p/slimtune/似乎可以正常工作。

答案 8 :(得分:11)

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

答案 9 :(得分:9)

我一直在使用JetBrains dotTrace用于WinForms和控制台应用程序(尚未在ASP.net上测试过),而且效果非常好:

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

答案 10 :(得分:7)

不要忘记令人敬畏的scitech .net memory profiler

这非常适合追踪.net应用内存不足的原因。

答案 11 :(得分:5)

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

能够在错误修复或增强之前和之后运行分析会话,然后比较结果是非常有价值的,特别是对于一个庞大的遗留.NET应用程序(如我的情况),性能从来不是优先考虑的事情瓶颈可能非常繁琐。通过执行前后差异,您可以查看每种方法的呼叫计数变化以及每种方法的持续时间变化

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

底线:dotTrace运行良好,差异非常宝贵。

答案 12 :(得分:4)

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

答案 13 :(得分:3)

过去,我使用的是Visual Studio Team System附带的分析器。

答案 14 :(得分:3)

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

答案 15 :(得分:2)

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

答案 16 :(得分:2)

我过去曾与RedGate的探查器合作过。这份工作对我而言。

答案 17 :(得分:2)

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

答案 18 :(得分:2)

我怀疑Visual Studio Team System附带的分析器是最好的分析器,但我发现它在很多场合都很好。除了VS提供什么,你还需要什么?

编辑:不幸的是它仅在VS Team System中可用,但是如果您有权访问它,则值得一试。

答案 19 :(得分:2)

ANTS内存分析器的最新版本(我认为它是5)只是摇滚!我使用WinDbg和SOS困扰着泄漏,因为事实证明它是最好的方式,然后我尝试了ANTS,我在几分钟内就得到了它。真的是一个很棒的软件。

答案 20 :(得分:1)

我必须带一个神奇的工具给你注意我曾经用过的时间。 AVICode Interceptor Studio 。在我以前的公司中,我们使用这个奇妙的工具来分析Web应用程序(这应该是世界上最大的单个Web应用程序,也是迄今为止最大的民用IT项目)。表演团队在这个宏伟的工具的帮助下创造了奇迹。配置它是一件痛苦的事,但这是一次性的活动,我认为值得花时间。结帐this page了解详情。

谢谢, 詹姆斯

答案 21 :(得分:1)

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

答案 22 :(得分:1)

我最近一直在测试Telerik的JustTrace,尽管它远离成品,但这些人正朝着正确的方向前进。

答案 23 :(得分:1)

不幸的是,当我使用尾部调用时,我试过的大多数剖析器都失败了,最明显的是ANTS。我最后写了自己的。 CodeProject上有一个简单的实现,您可以将其用作基础。

答案 24 :(得分:1)

答案 25 :(得分:1)

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

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

答案 26 :(得分:1)

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

答案 27 :(得分:0)

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

答案 28 :(得分:0)

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

通常在启动或关闭期间会出现问题,因为正在加载插件,并且正在创建,销毁,序列化或反序列化大数据结构。通常它们会被创建和初始化不止一次,并且更改处理程序会多次添加,从而进一步加剧了问题。

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

答案 29 :(得分:0)

我们在公司选择了YourKit Profiler for .NET,因为它是最好的价值(价格与功能)。对于想要拥有灵活许可(浮动许可证)的小公司来说,这是一个完美的选择 - 当时ANTS是开发者座位小盒子。

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