c# - 如何列出 GC finalization 列表中的所有对象?

标签 c# garbage-collection finalization

我的程序崩溃了,它是 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/

相关文章:

c# - C# try-finally CERs 会在迭代器中中断吗?

delphi - 释放 OleVariant 后面的接口(interface)的正确方法是什么?

c# - 从 WSDL (.NET) 生成 SOAP 请求

c# - Azure Pipelines - 在 .NET Core 项目中使用从 NuGet 下载的工具

java - JVM 垃圾收集突然占用大量 CPU

c# - 事件处理程序影响 CLR 中的垃圾回收

delphi - 使用运行时包编译的应用程序的单元最终确定顺序?

c# - 如何从后面的代码中显示 Bootstrap 弹出窗口?

c# - 如何将泛型与 SqlDataReader 一起使用

garbage-collection - 如何实现垃圾收集器?