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

时间:2013-03-04 16:50:41

标签: c# .net garbage-collection

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

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

2 个答案:

答案 0 :(得分:5)

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

但是,您可以使用GCHandle类型分配Weak,如果GCHandle是唯一指向它的{{1}}(如果您有'正常'),则GC会收集您的对象参考,也不会发生任何不好的事情。)

答案 1 :(得分:3)

  

当句柄超出范围时,您必须通过调用Free方法显式释放它;否则,可能会发生内存泄漏。释放固定句柄时,如果没有其他引用,则关联对象将被取消固定,并且有资格进行垃圾收集。

- http://msdn.microsoft.com/en-us/library/khk3k17t.aspx