![]() |
1
5
非托管的dll-sos(strike之子)提供了实现这一点的方法,尽管我认为它不具有重要的脚本支持,也不提供通过单个命令实现这一点的简单方法。您必须反省变量的地址,检查变量的所有gcrots(显然包括堆栈),并处理其余部分。 我建议,如果你想证明一个物体 不 引用,一个更简单的技术是(暂时)使其可完成,确保不再在单元测试的堆栈上引用它,然后通过 GC.Collect() 然后使用 GC.WaitForPendingFinalizers() . Finalize方法可以设置静态布尔标志,然后单元测试可以断言这是真的。 我会质疑 效用 对此,没有进一步的解释,但这可能是证明单元测试中不存在悬空引用的最简单方法。 |
![]() |
2
3
.NET探查器使用
profiling API
跟踪对象的图形。您可能对回调方法特别感兴趣
This article 解释如何将所有部件组合在一起。 |
![]() |
3
1
还要记住.NET的用法 traced garbage collection 因此,如果你的应用不再引用任何对象,其他对象引用的对象(例如对象图)仍将被GC清除;它比.NET之前的经典引用计数垃圾收集算法聪明得多。这意味着,即使您找到了一种方法来精确定位对某个对象的所有引用,其中一些引用可能并不重要,也可能不需要处理。 这并不能直接回答如何查找对象的所有引用,但会让读者意识到,当您通过工具或实用程序查找所有引用时,某些类型的东西不再需要在.NET中修复,例如经典的循环引用,因此您可能需要寻找一些巧妙的kn方法。在试图修复内存泄漏时忽略了什么。 此说明仅适用于托管代码方案。 |
![]() |
codeforester · 测量GC暂停时间的最佳方法是什么? 7 年前 |
![]() |
Venki WAR · 需要解释G1的并行完整GC 7 年前 |
![]() |
Stephan_Berlin · 为什么CMS系列中的初始标记阶段 7 年前 |
![]() |
Bonsaisteak · 为什么年轻一代需要三个区域来收集垃圾? 7 年前 |
![]() |
goks · 如何清除熊猫的数据帧内存? 7 年前 |