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

8

为了确保,假设我已经在这个固定的数组上钉住了一个字节数组和一个GCHandle。

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

2个回答

7

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

然而,你可以使用 Weak 类型分配 GCHandle,这将允许 GC 在您的 GCHandle 是唯一指向它的句柄时收集您的对象(如果您还有“正常”引用,什么也不会发生)。


4

是的。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接