【问题标题】:non deterministic garbage collection非确定性垃圾收集
【发布时间】:2015-11-04 16:49:04
【问题描述】:

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

谢谢

【问题讨论】:

  • 你在哪里读到的?这是假的。一般来说,它是用于确定性资源清理(如释放操作系统句柄等)。

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


【解决方案1】:

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

值得注意的是,如果您正在与实现 IDisposable 的对象交互,您仍应确保在丢失对该对象的引用之前对该对象调用 Dispose()(使用 using 块,这当您离开 using 块或在对象上显式调用 Dispose() 时,也会产生将其从范围中删除的效果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多