检查.NET 3.5中给定实例保留的引用数

时间:2010-12-28 21:06:57

标签: c# .net garbage-collection reference weak-references

是否可以检查.NET 3.5中给定实例的引用数量?

5 个答案:

答案 0 :(得分:4)

您无法在运行时执行此操作。

答案 1 :(得分:2)

如果加载SOS扩展名,可以使用WinDbg调试器完成此操作:

.loadby sos.dll mscorwks

您需要在内存中找到对象的地址,最好使用!dumpheap命令。使用对象地址,您可以运行!gcroot <address>来查找对象的所有引用。

答案 2 :(得分:1)

调试时,您可以使用Windbg获取此数据。 Windbg中有特定的命令。我不是Windbg的专家,但这会让你开始

http://www.bytetalk.net/2009/03/windbg-tips-and-tricks.html

答案 3 :(得分:1)

我喜欢ANTS Memory Profiler来完成这些任务。

答案 4 :(得分:1)

您无法在运行时通过CLR获取此信息,因为CLR不会维护引用计数。一个很大的暗示是垃圾收集器是世代的而不是引用计数。

Raymond Chen在这里有一篇关于这个主题的好文章:

http://blogs.msdn.com/b/oldnewthing/archive/2010/08/11/10048629.aspx