我想在.Net 2.0上使用像CLR Profiles这样的东西来查看在任何给定时间(ASP.Net工作进程)中哪些对象在堆中占用更多空间。
但是,CLR Profiler只允许我启动应用程序,而不是附加到现有应用程序。我认为这是因为它也跟踪分配和GC,但我对此不是很感兴趣。我想要一些能够获取堆当前状态的快照的东西,并告诉我那里有什么,每种对象有多少,以及每种对象类型使用了多少字节。
有什么想法吗?
答案 0 :(得分:9)
cdb -p
.loadby sos mscorwks
!TraverseHeap heap.txt
QD
答案 1 :(得分:3)
.Net Memory Profiler正是您所需要的。它不是免费的,但有一个试用版。实际上我用试验来发现我们上一个项目的漏洞。一个值得注意的特点是:
轻松识别内存泄漏 收集和比较的快照 .NET内存
我认为这就是你要找的东西。
答案 2 :(得分:1)
This article from MSDN讨论如何使用免费的CLR Profiler来比较堆栈的实例。你是对的,你现在无法将CLR Profiler附加到正在运行的进程(文章解释了原因),但是,对于它的价值,听起来你很快就会发现。
答案 3 :(得分:0)
你看过RedGates .NET Profiler吗?
自从我使用它已经有一段时间了,但我很乐意你随时可以附加到任何CLR流程。