我想使用 .Net 2.0 上的 CLR 配置文件之类的工具来查看在任何给定时间(ASP.Net 工作进程的)哪些对象在堆中占用了更多空间。

但是,CLR Profiler 只允许我启动一个应用程序,而不能附加到现有应用程序。我认为这是因为它也跟踪分配和 GC,但我对此不太感兴趣。我只想要一些能够拍摄堆当前状态的快照,并向我显示其中有什么以及每种类型有多少对象,以及每种对象类型总共使用了多少字节。

有任何想法吗?

有帮助吗?

解决方案

.Net 内存分析器 正是您所需要的。它不是免费的,但有试用版。事实上,我通过这次试验来发现我们上一个项目的漏洞。一个显着的特点是:

通过收集和比较.NET内存的快照来轻松识别内存泄漏

我想这就是你所寻找的。

其他提示

  • 连接调试器

CDB-p

  • 加载.net调试器扩展

.loadby sos mscorwks

  • 以 CLRProfiler 理解的格式转储堆

!TraverseHeap heap.txt

  • 分离调试器

qd

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

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

您看过 RedGates .NET Profiler 吗?

我已经有一段时间没有使用它了,但我不确定您可以随时附加到任何 CLR 进程。

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