我发现C#中的dispose方法用于确定性垃圾收集,因为您知道在调用该方法时会处置该对象。你能提供一个关于非确定性垃圾收集的简单例子吗?它通常是在多线程情况下发生的吗?
由于
答案 0 :(得分:1)
Dispose
不会触发垃圾收集。相反,IDisposable
接口用于需要某种清理的项目 - 例如,它们可能在系统上打开了文件句柄,或者取出了信号量锁,或者沿着这些行。如果要强制在对象上执行垃圾收集,那么您可以做的最好的事情就是确保它不会超出范围,或者删除对该对象的引用。
值得注意的是,如果您正在与实现IDisposable
的对象进行交互,那么在丢失对对象的引用之前,仍应确保在对象上调用Dispose()
(使用using
阻止,当您退出using
阻止时,或者通过在对象上显式调用Dispose()
时,它也会将其从范围中删除。
总结一下:IDisposable
和Dispose()
不是关于确定性垃圾收集,它们是关于向对象发信号通知让他们知道他们可以自己清理 - 你是使用它们完成。