2013-03-04 46 views
4

只是为了确保,因为我固定了这个固定数组上的字节数组和GCHandle。GCHandle.Free()是否简单地释放句柄?

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

回答

5

你说得对。 GCHandle只是对同一个对象的另一个句柄,只要你至少有一个,你的对象就不会被丢弃。

但是,你可以用Weak型,这将使​​GC收集你的对象,如果你GCHandle是指向它的唯一一个(如果你有“正常”的参考为好,没有什么大不了的发生)分配GCHandle

3

是的。

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

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

相关问题