1

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

谢谢

4

1 回答 1

1

Dispose一般来说,不会触发垃圾收集。相反,该IDisposable界面适用于需要某种清理的项目 - 例如,它们可能在系统上打开了一个文件句柄,或者已经取出了信号量锁,或者类似的东西。如果你想强制垃圾回收发生在一个对象上,你能做的最好的事情是确保它要么退出范围,要么你放弃对对象的引用。

值得注意的是,如果您正在与实现 的对象进行交互IDisposable,您仍应确保在丢失Dispose()对对象的引用之前在对象上调用using您不在using障碍范围内,或者通过显式调用Dispose()对象。

总结一下:IDisposable并且Dispose()不是关于确定性垃圾收集,它们是关于向对象发出信号,让他们知道他们可以自己清理 - 你已经使用它们了。

于 2015-11-04T16:57:56.883 回答