我的程序崩溃了,它是 VS 的可视化工具,所以很难调试它,我尝试制作转储并使用 WinDbg 研究它,但没有成功。
所以,现在我尝试以编程方式处理该列表,但我不知道如何操作。谢谢。
最佳答案
如果您想查看一个对象是否在终结队列或 f-reachable 队列中,当您启动 WinDBG 时,首先使用 dumpheap -stat
或任何其他命令找到您的对象。找到该对象地址后,您可以使用 !FinalizeQueue
这将输出每一代有多少对象可终结,以及有多少对象准备好终结。前者是finalization queue,后者是f-reachable queue。
例如:
0:003> !FinalizeQueue
SyncBlocks to be cleaned up: 0 MTA Interfaces to be released: 0 STA Interfaces to be released:0
generation 0 has 370 finalizable objects
(0000000000d29030->0000000000d29bc0)generation 1 has 4 finalizable objects
(0000000000d29010->0000000000d29030)generation 2 has 8 finalizable objects
(0000000000d28fd0->0000000000d29010)Ready for finalization 571 objects
(0000000000d29bc0->0000000000d2ad98)
现在,您可以看到对象地址空间的位置。
一个很棒的教程是 available here
关于c# - 如何列出 GC finalization 列表中的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346990/