非确定性垃圾收集

时间:2015-11-04 16:49:05

标签: c# garbage-collection finalizer non-deterministic

我发现C#中的dispose方法用于确定性垃圾收集,因为您知道在调用该方法时会处置该对象。你能提供一个关于非确定性垃圾收集的简单例子吗?它通常是在多线程情况下发生的吗?

由于

1 个答案:

答案 0 :(得分:1)

一般来说,

Dispose不会触发垃圾收集。相反,IDisposable接口用于需要某种清理的项目 - 例如,它们可能在系统上打开了文件句柄,或者取出了信号量锁,或者沿着这些行。如果要强制在对象上执行垃圾收集,那么您可以做的最好的事情就是确保它不会超出范围,或者删除对该对象的引用。

值得注意的是,如果您正在与实现IDisposable的对象进行交互,那么在丢失对对象的引用之前,仍应确保在对象上调用Dispose()(使用using阻止,当您退出using阻止时,或者通过在对象上显式调用Dispose()时,它也会将其从范围中删除。

总结一下:IDisposableDispose()不是关于确定性垃圾收集,它们是关于向对象发信号通知让他们知道他们可以自己清理 - 你是使用它们完成。