.NET内存分析工具

可能重复:
什么是一些好的.NET分析器?

我正在寻找优秀的.NET CLR内存分析工具。

我的关键要求是它可以很好地与IIS和独立的CLR应用程序配合使用。 理想情况下,我会看到什么对象分配,他们在哪里分配,他们是多大?

有没有人有任何好的经验,你会很乐意推荐一个特定的工具?

我目前正在评估Scitech .NET Memory Profiler 3.1和ANTS Memory Profiler 5.1 。 我在一两年前试过了JetBrains,而且还不如ant,所以我没有打扰过这个时间。 从阅读网站看来,它不像其他两个那样好记忆分析。

ant和赛特内存分析器都具有其他function,所以最好取决于您的喜好。 一般来说,Scitech提供了更详细的信息,而ANTS在识别泄漏物体方面真的不可思议。 总的来说,我更喜欢ant,因为它很快找出可能的泄漏。

以下是我的经验的主要优点和缺点:

ant和Scitech .NET内存分析器的共同特点

  • 实时分析function
  • 在他们的网站上出色的指导video
  • 使用方便
  • 合理的性能(明显慢于没有附带的轮廓仪,但不是太多,你变得沮丧)
  • 显示泄漏对象的实例
  • 基本上他们都做得很好

ant

  • 一键式filter可以发现常见的泄漏,包括:仅由事件处理程序保持活动状态的对象,处置但仍处于活动状态的对象以及仅通过从处置对象引用保持活动状态的对象。 这可能是ANTS的杀手锏 – 发现泄漏的速度非常快,因为这个。 根据我的经验,大部分的泄漏事件都是由事件处理程序不能脱钩引起的,ANTS只是直接引导这些对象。 真棒。
  • 对象保留图。 虽然在Scitech中有相同的信息,但在ANTS中解释要容易得多。
  • 除了对象本身的大小之外,还显示子项的大小(但只有在不幸select了实例时,才会显示在整个class级列表中)。
  • 更好地集成到Visual Studio(右键单击graphics跳转到文件)

Scitech .NET内存分析器

  • 显示对象分配时的堆栈跟踪。 这对于在很多不同地方分配的对象来说非常有用。 有了ANTS,就很难准确确定泄漏物体的创build位置。
  • 显示未处理的一次性物品的数量。 尽pipe没有泄露的迹象,但确实有机会解决这个问题,并通过更快速的垃圾收集来提高应用程序的性能。
  • 更详细的过滤选项(几列可以独立过滤)。
  • 呈现所创build对象的信息(包括收集的垃圾)。 ANTS只显示“实时”对象统计。 这样可以更轻松地分析和调整整体应用程序性能(例如,识别不必要地创build的大量对象,这些对象不一定会泄漏)。

总而言之,我认为ANTS可以帮助您更快find泄漏的地方,而一旦您知道要查看哪些内容(例如创build堆栈跟踪),Scitech会提供关于您的整体应用程序内存性能和单个对象的更多细节。 如果堆栈跟踪和未处理的一次性对象的跟踪添加到ant,我不会看到需要使用任何东西。

奇怪的是,这里还没有提到CLR Profiler 。 它是免费的,运作良好。

注意微软自己的网站提供的多个旧版本。 截至2011年11月,最新版本似乎是这样的: 最新版本 (替代链接)

如果你感到非常绝望,你可以使用带有.Net框架的Strike库 (SOS.DLL)来使用WinDbg 。

JetBrains Profiler自己的粉丝

.Net Memory Profiler在我之前的项目上帮了我很多。 这不是免费的,但非常好。

.NET Memory Profiler是一个强大的工具,用于查找内存泄漏并优化用C#,VB.NET或任何其他.NET语言编写的程序中的内存使用情况。

我第二个ant探查器 。

除了显示所有你需要的,它会绘制简单的图表,你可以看到哪些执行时间最长,什么吃内存。 当你点击graphp时,它会显示你的代码中相应的行。

而且我喜欢在执行时间太长的代码行上lit lit进度条。

我目前正在使用ant探查器 。 这是一个非常好的工具,具有许多详细的分析选项,可以很好地与独立应用程序,开发服务器和IIS配合使用。

由于每个人都列出了可用的工具,我以为我会指出你的.NET分析器的完整列表: http : //sharptoolbox.com/categories/profilers-debuggers

您会发现这里提供的工具以及其他所有工具,每个工具都提供了一个简短的描述。

多年来我一直使用Aqtime取得了巨大的成功。 我尝试了ant和其他人,但回到Aqtime,因为我也做了很多非托pipe代码的发展。