当前位置:  开发笔记 > 大数据 > 正文

如何调试.net垃圾收集?

如何解决《如何调试.net垃圾收集?》经验,为你挑选了1个好方法。

是否可以查看调用GC.Collect()时收集的所有.net对象?

我需要看看哪些对象仍在内存中而不是回收,所以我可以找到回收对象应该手动完成的地方,但程序员已经忘记了.
我不想调用GC.Collect,因为有人在某处忘记了处理阻塞某些句柄的对象.



1> JaredPar..:

我发现最好的方法是使用windbg和SOS(罢工之子)扩展.它有一个相当神秘的命令行,但它非常强大.它具有转储堆并由GC生成堆分割的能力.一旦超过初始学习曲线,就可以很容易地跟踪堆的哪个部分中存在的对象.以下是一些使用SOS的网站

http://blogs.msdn.com/tess/archive/2005/11/25/dumpheap-stat-explained-debugging-net-leaks.aspx

http://geekswithblogs.net/.NETonMyMind/archive/2006/03/14/72262.aspx

http://dotnetdebug.ne​​t/2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system/

EDIT OP询问了sos.dll的位置.它包含在.Net Framework的安装中.它位于

%WINDIR%\ Microsoft.Net \框架\ V2.0.50727\sos.dll

但是一旦你加载了windbg,就不需要完整的路径了.只是我们的.loadby方法.

.loadby sos mscorwks.dll

它将在与当前版本的mscorwks(CLR)相同的目录中查找sos的版本

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有