7

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

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

4

2 回答 2

7

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

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

于 2013-03-04T16:53:53.517 回答
4

是的。

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

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

于 2013-03-04T16:54:47.770 回答