由于垃圾收集无法清除非托管代码。要清除非托管代码我们使用dispose方法,反过来可以吗?我们可以使用dispose方法清除管理代码对象吗?
答案 0 :(得分:4)
Dispose
方法实现可能将某些字段设置为null
,即使包含对象本身不符合条件,也可能使“子”对象符合垃圾回收条件垃圾收集。
它不能强行删除对象 - 它最接近的可能就是调用GC.Collect
。
Dispose
当然不会 来清除字段 - 例如,使用MemoryStream
,您可以访问流中的数据(通过{{3或者ToArray
)甚至在处理之后。
通常情况下,让垃圾收集器继续使用它擅长的东西会更好(IMO)。
答案 1 :(得分:0)
如果你真的需要强制执行此操作 - 你可以在你的课程上实现IDisposable,然后在using(){}
块中使用它,一旦它超出范围,它将在下一个GC.Collect
周期清理,可以通过调用方法强制执行。