374

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

4

30 回答 30

284

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

dotTrace 与 Resharper 集成,非常方便,因为您可以在 IDE 中一键分析单元测试的性能。然而,dotTrace 似乎经常给出虚假的结果(例如说一个方法需要几年才能运行)

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

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

总的来说,我更喜欢 ANTS 进行性能分析,尽管如果您使用 Resharper,那么 dotTrace 的集成是一个杀手级功能,这意味着它在可用性方面击败了 ANTS。

免费的 Microsoft CLR Profiler ( .Net framework 2.0 / .Net Framework 4.0 ) 是 .NET 内存分析所需的一切。

2011 年更新:

Scitech 内存分析器有一个非常基本的UI,但有很多有用的信息,包括一些 dotTrace 和 ANTS 缺少的关于非托管内存的信息 - 如果你正在做 COM 互操作,你可能会发现它很有用,但我还没有找到任何分析器使 COM记忆问题很容易诊断——你通常必须爆发windbg.exe

ANTS 分析器在过去几年中突飞猛进,它的内存分析器具有一些真正有用的功能,据我估计,现在它作为一个软件包将其推向了 dotTrace 之前。我很幸运拥有两者的许可证,但是如果您要购买一个同时用于性能和内存的 .Net 分析器,那就让它成为 ANTS。

于 2008-09-19T08:29:08.040 回答
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 中,我不会看到需要使用其他任何东西。

于 2009-09-25T03:16:32.280 回答
45

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

于 2008-08-29T09:46:26.330 回答
31

[全面披露]

虽然功能还不如此处列出的其他一些 .NET 内存分析器功能全面,但市场上有一个名为JustTrace的新条目。它由 Telerik 制作,其主要目标是让所有类型的应用程序(网络/Silverlight/桌面)更容易和更快地进行跟踪/分析。

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

于 2011-08-22T15:42:44.277 回答
25

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

于 2008-08-06T20:19:16.417 回答
14

我发现JetBrains的dotTrace Profiler是一款出色的 .NET 分析工具,并且它们的 ASP.NET 模式质量很高。

于 2009-03-04T22:23:30.820 回答
12

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

于 2008-08-06T20:19:00.253 回答
11

AutomatedQA AQTime用于计时,SciTech MemProfiler用于内存。

于 2008-08-29T09:49:56.367 回答
11

如果您正在寻找快速、简单和免费的东西,http://code.google.com/p/slimtune/似乎可以很好地完成工作。

于 2010-12-29T20:04:40.507 回答
9

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

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

于 2008-08-06T20:17:59.553 回答
7

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

它非常适合追踪您的 .net 应用程序内存不足的原因。

于 2008-10-15T22:25:20.340 回答
5

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

能够在错误修复或增强之前和之后运行分析会话,然后比较结果是非常有价值的,尤其是对于一个庞大的遗留 .NET 应用程序(在我的例子中),性能从来不是优先考虑的问题,而且发现瓶颈可能是很乏味。进行前后差异可以让您查看每个方法的调用次数的变化以及每个方法的持续时间的变化。

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

底线:dotTrace 效果很好,差异是无价的。

于 2009-04-07T23:29:35.177 回答
4

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

于 2009-03-04T22:19:44.260 回答
3

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

于 2008-08-31T05:12:31.653 回答
3

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

于 2010-02-08T13:15:34.043 回答
2

我过去曾使用过 RedGate 的分析器。为我完成了这项工作。

于 2008-08-06T20:17:06.280 回答
2

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

于 2009-03-04T22:19:50.143 回答
2

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

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

于 2009-03-04T22:20:34.400 回答
2

最新版本的 ANTS 内存分析器(我认为是 5)简直太棒了!我一直在使用 WinDbg 和 SOS 来解决泄漏问题,因为它被证明是以前最好的方法,然后我尝试了 ANTS,我在几分钟内就搞定了。真的是一款很棒的软件。

于 2009-07-07T22:07:10.153 回答
2

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

于 2010-06-15T09:56:31.103 回答
1

不幸的是,我尝试的大多数分析器在与尾调用一起使用时都失败了,尤其是 ANTS。我只是最终写我自己的。CodeProject 上有一个简单的实现,您可以将其用作基础。

于 2008-09-19T08:38:59.750 回答
1

用于快速采样的英特尔® VTune™ 性能分析器

于 2008-09-19T08:48:46.463 回答
1

我必须带上一个很棒的工具来引起你的注意,我曾经使用过。AVICode 拦截器工作室。在我以前的公司中,我们使用这个出色的工具来分析 Web 应用程序(这应该是世界上最大的 Web 应用程序,也是有史以来最大的民用 IT 项目)。表演团队在这个宏伟的工具的帮助下创造了奇迹。配置它很痛苦,但这是一次性的活动,我会说值得花时间。查看此页面了解详情。

谢谢,詹姆斯

于 2010-03-16T21:07:33.377 回答
1

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

于 2010-08-07T11:31:45.240 回答
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 的产品经理。

于 2011-01-31T03:16:08.263 回答
1

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

于 2011-09-02T13:05:29.797 回答
1

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

于 2012-02-02T15:36:07.877 回答
0

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

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

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

于 2009-06-05T15:17:10.210 回答
0

我们在我的公司中选择了适用于 .NET 的 YourKit Profiler,因为它具有最佳价值(价格与功能)。对于一家希望拥有灵活许可(浮动许可)的小公司来说,这是一个完美的选择——ANTS 在当时是开发者座位挂坠盒。

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

于 2012-01-09T16:12:17.377 回答
0

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

于 2012-03-13T14:41:04.410 回答