As垃圾回收无法清除非托管代码。要清除非托管代码,我们使用dispose方法,但是否可以反之亦然?我们可以使用dispose方法清除管理代码对象吗?
Dispose
方法实现可能将某些字段设置为null
,从而可能使"子"对象有资格进行垃圾收集,即使包含对象本身不符合垃圾收集的条件。
不过,它不能强制删除对象——最接近的方法是调用GC.Collect
。
当然,Dispose
根本没有来清除字段-例如,使用MemoryStream
,即使在处理完数据后,也可以访问流中的数据(通过ToArray
或GetBuffer
)。
通常(IMO)最好让垃圾收集器继续做它擅长的事情。
如果你真的需要强制执行,你可以在你的类上实现IDisposable,然后在using(){}
块中使用它,一旦它超出范围,它将在下一个GC.Collect
循环中被清除,这可以通过调用方法来强制执行。