即使在方法中,我是否也必须使用 using
语句来立即处置?或者该方法的结束会导致包括图形在内的所有局部变量的自动 Dispose
吗?
(我问这个是因为我见过在方法末尾调用 Dispose
的示例,我想知道这是否真的有必要。)
谢谢。
最佳答案
是的,你知道。超出范围不会做任何事;它不调用 Dispose()
,不进行垃圾收集,不调用终结器。
如果类型是IDisposable
,则是。自己整理是您的工作(假设此时该对象实际上已“完成”)。
不这样做可能产生的副作用:
- 文件保持打开状态并导致访问异常 (
FileStream
) - 连接保持打开状态并导致池饱和(
DbConnection
) - 非托管句柄饱和并导致资源匮乏(任何 winforms/等)
- 事务保持打开状态并导致阻塞(
TransactionScope
/DbTransaction
) - 等等
基本上,坏事。
此外,在您在方法底部看到 Dispose()
的大多数 情况下,using
会更可取。在某些情况下, 这是不可能的(例如,对象上的字段),但要点仍然存在:听起来这些都是不好的例子。
关于c# - 我必须在简短的方法中使用 “using” 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732654/