GCHandle.Free()只是释放句柄吗?

Kel*_*Kel 5 .net c# garbage-collection

只是为了确保,因为我在这个固定阵列上固定了字节数组和GCHandle.

当调用GCHandle.Free()方法时,它是否只是释放句柄并将原始字节数组的管理移交给GC,因此如果存在对该数组的活动引用,则它将不会被释放?

Mar*_*uła 5

你是对的.GCHandle只是同一个对象的另一个句柄,只要你至少有一个,你的对象就不会被处理掉.

但是,您可以GCHandle使用Weak类型进行分配,这将允许GC收集您的对象,如果您GCHandle是唯一指向它的对象(如果您也有"正常"引用,则不会发生任何不良事件).