gpt4 book ai didi

VB.NET - 实现 IDisposable 时是否应该添加 Finalize 方法?

转载 作者:行者123 更新时间:2023-12-03 01:12:44 24 4
gpt4 key购买 nike

在 Visual Studio 中,当我键入“Implements IDisposable”行时,IDE 会自动添加:

  • 一个disposeValue成员变量
  • Sub Dispose() 实现 IDisposable.Dispose
  • a Sub Dispose(ByVal 处置为 bool 值)

Dispose() 应该保留,清理代码应该放在 Dispose(disusing) 中。

但是Dispose Finalize Pattern表示您还应该重写 Sub Finalize() 来调用 Dispose(False)。为什么IDE不添加这个呢?我必须自己添加它,还是以某种方式隐式调用它?

编辑:知道为什么 IDE 会自动添加 80% 的必需内容但忽略 Finalize 方法吗?这种功能的全部意义不就是帮助您 忘记这些事情吗?

EDIT2:感谢大家的出色回答,这现在非常有意义!

最佳答案

如果您实际上持有垃圾收集器不会自动清理的非托管资源并在 Dispose() 中清理它们,那么是的,您应该在 Finalize() 中执行相同的操作。

如果您出于其他原因实现 IDisposable,则不需要实现 Finalize()。

基本问题是:如果没有调用 Dispose() 并且你的对象被垃圾回收,内存会泄漏吗?如果是,则执行Finalize。如果没有,则不需要。另外,避免“仅仅因为它更安全”而实现 Finalize。具有自定义终结器的对象可能需要两次 GC 传递来释放它们 - 一次将它们放入挂起的终结器队列,第二次传递实际释放其内存。

关于VB.NET - 实现 IDisposable 时是否应该添加 Finalize 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com