我发现 C# 中的 dispose 方法用于确定性垃圾收集,因为您知道在调用该方法时对象已被释放。你能提供一个关于非确定性垃圾收集的简单例子吗?它通常发生在多线程情况下吗?
谢谢
我发现 C# 中的 dispose 方法用于确定性垃圾收集,因为您知道在调用该方法时对象已被释放。你能提供一个关于非确定性垃圾收集的简单例子吗?它通常发生在多线程情况下吗?
谢谢
Dispose
一般来说,不会触发垃圾收集。相反,该IDisposable
界面适用于需要某种清理的项目 - 例如,它们可能在系统上打开了一个文件句柄,或者已经取出了信号量锁,或者类似的东西。如果你想强制垃圾回收发生在一个对象上,你能做的最好的事情是确保它要么退出范围,要么你放弃对对象的引用。
值得注意的是,如果您正在与实现 的对象进行交互IDisposable
,您仍应确保在丢失Dispose()
对对象的引用之前在对象上调用using
您不在using
障碍范围内,或者通过显式调用Dispose()
对象。
总结一下:IDisposable
并且Dispose()
不是关于确定性垃圾收集,它们是关于向对象发出信号,让他们知道他们可以自己清理 - 你已经使用它们了。