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

有帮助吗?

解决方案

我用过 JetBrains dotTrace红门蚂蚁 广泛地。它们在功能和价格上非常相似。它们都提供有用的性能分析和相当基本的内存分析。

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

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

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

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

免费的 Microsoft CLR Profiler (.Net框架2.0 / .Net框架4.0)是 .NET 内存分析所需的全部内容。

2011 年更新:

Scitech 内存分析器 有一个相当基本的 UI,但有很多有用的信息,包括 dotTrace 和 ANTS 缺乏的一些关于非托管内存的信息 - 如果您正在进行 COM 互操作,您可能会发现它很有用,但我还没有找到任何分析器,可以轻松解决 COM 内存问题诊断——你通常必须爆发 windbg.exe.

ANTS 分析器在过去几年中取得了突飞猛进的发展,它的内存分析器具有一些真正有用的功能,据我估计,这些功能现在使其作为一个软件包领先于 dotTrace。我很幸运拥有两者的许可证,但如果您打算购买一个 .Net 分析器来兼顾性能和内存,那就让它成为蚂蚁吧。

其他提示

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

ANTS 和 Scitech 内存分析器都具有对方没有的功能,因此哪个最好取决于您的喜好。一般来说,Scitech 提供了更详细的信息,而 ANTS 则在识别泄漏对象方面确实令人难以置信。总的来说,我更喜欢 ANTS,因为它可以快速识别可能的泄漏。

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

ANTS 和 Scitech .NET 内存分析器的共同特征

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

蚂蚁

  • 一键过滤器查找常见泄漏 包括:仅由事件处理程序保持活动状态的对象、已释放但仍处于活动状态的对象以及仅通过已释放对象的引用保持活动状态的对象。这可能是 ANTS 的杀手级功能 - 因此发现泄漏的速度非常快。根据我的经验,大多数泄漏是由于事件处理程序未解除挂钩而引起的,而 ANTS 只是将您直接带到这些对象。惊人的。
  • 对象保留图。虽然 Scitech 中提供了相同的信息,但在 ANTS 中解释起来要容易得多。
  • 除了对象本身的大小之外,还显示子对象的大小(但不幸的是,仅当选择实例时,而不是在整个类列表中)。
  • 与 Visual Studio 更好的集成(右键单击图形可跳转到文件)

Scitech .NET 内存分析器

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

总而言之,我认为 ANTS 可以帮助您更快地找到泄漏的内容,而一旦您知道要查看什么(例如,创建时的堆栈跟踪)。如果将堆栈跟踪和未处理一次性对象的跟踪添加到 ANTS 中,我认为不需要使用其他任何东西。

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

[全面披露]

虽然尚未像此处列出的其他一些 .NET 内存分析器那样功能齐全,但市场上有一个新产品,称为 正义追踪. 。它由 Telerik 制作,其主要目标是使所有类型的应用程序(Web/Silverlight/桌面)的跟踪/分析变得更容易、更快捷。

如果您发现其他工具的分析和优化令人生畏或速度缓慢,那么 正义追踪 也许值得一瞧。

别忘了 教授 - 一个非常好的免费软件分析器。

我已经发现 dotTrace 分析器 经过 捷脑公司 成为优秀的 .NET 分析工具,他们的 ASP.NET 模式是高质量的。

蚂蚁分析器. 。我没用过很多,但我对ANTS确实没有任何抱怨。可视化确实很有帮助。

自动QA AQTime 用于计时和 科技内存分析器 为了记忆。

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

我一直在与 JetBrains dotTrace 对于 WinForms 和控制台应用程序(尚未在 ASP.net 上测试),它运行得很好:

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

不要忘记令人敬畏的科学技术 .net 内存分析器

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

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

能够在错误修复或增强之前和之后运行分析会话,然后比较结果是非常有价值的,特别是对于庞大的遗留 .NET 应用程序(如我的例子),其中性能从来都不是优先考虑的问题,而查找瓶颈可能是最重要的非常乏味。进行前后比较可以让您看到 每种方法的调用计数发生变化每种方法的持续时间变化.

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

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

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

过去,我使用过附带的分析器 Visual Studio 团队系统.

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

我过去曾使用过 RedGate 的分析器。为我做了这份工作。

我自己没试过,但也许 点跟踪?他们的 ReSharper 应用程序无疑是一款不错的应用程序。也许 dotTrace 也是:)

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

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

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

我想补充一下 你的工具包 java 和 .net 分析器,我喜欢 Java,但还没有尝试过 .NET 版本。

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

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

谢谢,詹姆斯

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

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

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

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 开发合作伙伴的产品经理。

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

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

在这种情况下,程序可能会非常缓慢,以至于只有 2 个样本就足以查明有问题的方法/函数/属性调用站点。

我们在我的公司选择了 YourKit Profiler for .NET,因为它具有最佳价值(价格与性能)。特征)。对于一家想要灵活许可(浮动许可)的小公司来说,这是一个完美的选择 - ANTS 当时是开发者席位。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top