以下是我检查对象0330e9a8的gcroot。 我发现它的根是一个hanle,其类型是“RefCnt”。
我怎样才能得到它的实际参考数量。我怎么知道WHICH对象获得了它的参考?
0:042> !GCRoot 0330e9a8
Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
Scan Thread 5 OSTHread 534
Scan Thread 8 OSTHread 60c
Scan Thread 9 OSTHread 1120
Scan Thread 10 OSTHread 1b30
Scan Thread 11 OSTHread 52c
Scan Thread 12 OSTHread 1da8
Scan Thread 15 OSTHread 1cbc
Scan Thread 19 OSTHread 1808
Scan Thread 22 OSTHread 1b6c
Scan Thread 23 OSTHread 1e70
Scan Thread 0 OSTHread 1a34
Scan Thread 32 OSTHread 1840
DOMAIN(001C1050):HANDLE(RefCnt):d31460:Root:0330edf8(xxxxxxx)->
0330eedc(xxxxxxxxxxxx)->
0330e9a8(xxxxxxxxxxxxxx)
答案 0 :(得分:2)
这是一个GC句柄,可以保持.NET对象可以访问非托管代码 例如:订阅COM对象事件。
你在跑步时通常会看到什么类型的根!gcroot是什么意思?
ESP: ESP =扩展堆栈指针,对象正在堆栈上使用
强:强引用,通常是静态变量
WeakLn:弱长柄,通过定型跟踪的弱参考(可以复活)
WeakSh:弱短柄,弱参考,无法复活
固定:固定在特定地址的固定对象在垃圾回收过程中无法移动。
RefCnt:引用计数,只要引用计数为> 0