微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Dispose 方法中阻塞

如何解决在 Dispose 方法中阻塞

dispose() 方法中的阻塞(同步变体)无论如何会影响 GC 过程吗?

假设:

  • 没有明确终结器的类,
  • dispose 内没有真正的资源分配/释放,只是滥用模式在 dispose 调用点注入一些代码
  1. 到目前为止,我将 dispose 理解为一种“正常”方法,它也可能被编译器从某些语法糖结构(如 using (var i = new Something(...)){} 或 {{1})生成代码中“意外”调用如果 using var i = new Something(...) 不适合我们(出于任何原因),我们就直接调用它;
  2. 这意味着,内部的任何阻塞操作都意味着只会在 using 执行点延迟,对吗?
  3. 这意味着,GC 根本不关心 dispose 并且只收集任何实例,当没有对它的引用时,无论 dispose 是否被调用,对吧?
  4. 从上面我暗示,在上述条件下,在处理 dispose 中阻塞的实例时,没有任何内存泄漏或 GC 影响的原因,对吗?

此类示例:

dispose

解决方法

正确。

如果它没有终结器,GC 就不会关心 Dispose 方法。

这听起来像是一个很大的代码味道:如果 Dispose 是必要的,我想确保在大多数情况下调用它是可取的,因此您需要一个终结器。终结器在任何情况下不得阻塞或抛出异常。

Dispose 阻止两者也是出乎意料的。所以你真的应该避免这种设置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。