CLR Profiler-添加到现有流程

时间:2020-03-05 18:44:46  来源:igfitidea点击:

我想在.Net 2.0上使用CLR Profiles之类的东西来查看什么对象在给定的时间(在ASP.Net辅助进程中)正在堆中占用更多空间。

但是,CLR Profiler只允许我启动一个应用程序,而不能添加到现有的应用程序上。我认为这是因为它也跟踪分配和GC,但是我对此并不十分感兴趣。我只想对堆的当前状态进行快照,并向我展示其中存在什么以及每种对象有多少个对象,以及每种对象类型正在使用多少个字节。

有任何想法吗?

解决方案

回答

我们是否看过RedGates .NET Profiler?

自从我使用它已经有一段时间了,但是我无法确定我们可以随时添加到任何CLR进程。

回答

.Net Memory Profiler正是我们所需要的。它不是免费的,但是有一个试用版。实际上,我是通过试用来发现我们上一个项目的漏洞。一个值得注意的功能是:

Easily identify memory leaks by
  collecting and comparing snapshots of
  .NET memory

我认为这是我们要寻找的。

回答

  • 添加调试器

数据库-p

  • 加载.net调试器扩展

.loadby sos mscorwks

  • 以CLRProfiler可以理解的格式转储堆

!TraverseHeap heap.txt

  • 分离调试器

d

  • 在clrprofiler应用程序中加载heap.txt

回答

来自MSDN的本文讨论了如何使用免费的CLR Profiler与堆栈实例进行比较。没错,我们目前无法将CLR Profiler添加到正在运行的进程中(本文解释了原因),但是,就其价值而言,听起来我们将能够很快。