debugging 如何调试.net垃圾收集?

roejwanj  于 2022-11-24  发布在  .NET
关注(0)|答案(2)|浏览(152)

是否可以查看调用GC.Collect()时收集的所有**.net对象?**
我需要查看哪些对象仍在内存中并且没有回收,这样我就可以找到哪些地方应该手动回收对象,但是程序员忘记了。
我不想调用GC.Collect,因为某个地方的某个人忘记释放一个对象,而这个对象阻塞了一些句柄。

njthzxwz

njthzxwz1#

我发现最好的方法是使用windbg和SOS(son of strike)扩展。它有一个相当神秘的命令行,但它非常强大。它具有转储堆并将其除以GC代堆的能力。一旦您通过了最初的学习曲线,跟踪堆的哪个部分中哪些对象是活动的非常容易。

微软公司
但是一旦你加载了windbg,你就不需要完整的路径,只需要.loadby方法。
.loadby sos mscorwks.dll文件加载
它将在当前版本的mscorwks(CLR)所在的目录中查找sos的版本

llmtgqce

llmtgqce2#

我使用SciTech's Memory profiler。它的使用有点复杂,但有一些很好的教学视频。它会让你看到哪些对象没有被正确处理,它们是在哪一代收集的。没有它就不能调试内存泄漏...

相关问题