这个问题已经在这里有了答案:




已关闭8年。






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

我的主要要求是,它将与IIS和独立的CLR应用程序一起良好运行。理想情况下,我将看到分配了哪些对象,它们在哪里分配以及它们的大小?

任何人都对您乐于推荐的特定工具有良好的经验吗?

最佳答案

我目前正在评估Scitech .NET Memory Profiler 3.1ANTS Memory Profiler 5.1。我在一两年前尝试过JetBrains,它不如ANTS好,所以这次我没有打扰。通过阅读网站,看来内存分析不如其他两个更好。

ANTS和Scitech内存分析器都具有彼此不具备的功能,因此最好取决于您的喜好。一般来说,Scitech可以提供更详细的信息,而ANTS可以真正令人难以置信地识别泄漏的物体。总的来说,我更喜欢ANTS,因为它能很快发现可能的泄漏。

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

ANTS和Scitech .NET Memory Profiler的共同功能

  • 实时分析功能
  • 网站上的优秀操作视频
  • 易于使用的
  • 性能合理(显然比没有安装分析器时要慢,但不会让您沮丧)
  • 显示泄漏对象的实例
  • 基本上他们俩都做得很好

  • ANTS
  • 一键式筛选器以查找常见的泄漏,包括:仅由事件处理程序保持 Activity 的对象,已处置但仍处于 Activity 状态的对象以及仅由已处置对象的引用保持 Activity 的对象。这可能是ANTS的杀手级功能-因此,发现泄漏的速度非常快。以我的经验,大多数泄漏是由事件处理程序未被释放引起的,而ANTS只是将您带到这些对象。太棒了
  • 对象保留图。尽管Scitech中提供了相同的信息,但在ANTS中解释起来要容易得多。
  • 除了对象本身的大小外,还显示带有子项的大小(但仅当不幸地选择了一个实例时,才显示在整个类列表中)。
  • 更好地集成到Visual Studio(在图形上单击鼠标右键以跳至文件)

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

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

    10-08 03:31