c# - 我必须在简短的方法中使用 “using” 语句吗?

标签 c# garbage-collection dispose using

即使在方法中,我是否也必须使用 using 语句来立即处置?或者该方法的结束会导致包括图形在内的所有局部变量的自动 Dispose 吗? (我问这个是因为我见过在方法末尾调用 Dispose 的示例,我想知道这是否真的有必要。)

谢谢。

最佳答案

是的,你知道。超出范围不会做任何事;它不调用 Dispose(),不进行垃圾收集,不调用终结器。

如果类型是IDisposable,则。自己整理是您的工作(假设此时该对象实际上已“完成”)。

不这样做可能产生的副作用:

  • 文件保持打开状态并导致访问异常 (FileStream)
  • 连接保持打开状态并导致池饱和(DbConnection)
  • 非托管句柄饱和并导致资源匮乏(任何 winforms/等)
  • 事务保持打开状态并导致阻塞(TransactionScope/DbTransaction)
  • 等等

基本上,坏事。

此外,在您在方法底部看到 Dispose()大多数 情况下,using 会更可取。在某些情况下, 这是不可能的(例如,对象上的字段),但要点仍然存在:听起来这些都是不好的例子。

关于c# - 我必须在简短的方法中使用 “using” 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732654/

相关文章:

c# - 为什么我在 Unity3D 的场景中从一个空的 GameObject 获得了 30 个绘制调用?

c# - 我将默认 JsonSerializer 设置为 Utf8Json

c# - IServiceCollection 不包含定义 AddJsEngineSwitcher

android - Xamarin.Android - GC 停止我的应用程序 2 秒

c# - 保证 Dispose 被称为 "when the process is ending"

c# - LINQ 获取全局索引

Eclipse:垃圾收集器按钮

python 正在偷我的东西

c# - asp.net core dbcontext 在计时器结束时被释放

c# - 处理嵌套的一次性元素?