page contents

Finalize() 和 Dispose() 之间的区别?

轩辕小不懂 发布于 2022-02-28 16:49
阅读 652
收藏 0
分类:框架系列
3174
Nen
Nen
- 程序员

Finalize() 和 Dispose()都是.NET中提供释放非托管资源的方式,他们的主要区别在于执行者和执行时间不同:

finalize由垃圾回收器调用;dispose由对象调用。

finalize无需担心因为没有调用finalize而使非托管资源得不到释放,而dispose必须手动调用。

finalize不能保证立即释放非托管资源,Finalizer被执行的时间是在对象不再被引用后的某个不确定的时间;而dispose一调用便释放非托管资源。

只有class类型才能重写finalize,而结构不能;类和结构都能实现IDispose。

另外一个重点区别就是终结器会导致对象复活一次,也就说会被GC回收两次才最终完成回收工作,这也是有些人不建议开发人员使用终结器的主要原因。

请先 登录 后评论