【发布时间】:2010-09-04 00:42:28
【问题描述】:
免责声明:我知道在处理非托管资源时应该实现IDisposable。其余代码应该是确定性的,并执行using (...) { }(相当于try {} finally { Dispose(); })以保证尽快清理。此外,GC 将 not call Dispose(),因此推荐的模式是覆盖 Finalize() 方法(在 C# 中使用析构函数语法),然后调用 Dispose()。 GC 通常会调用Finalize()(除非已经调用了GC.SuppressFinalize())。
问题:所以现在我解决了这个问题,我遇到了一个奇怪的情况,由于我无法控制代码,我无法执行 using (SqlConnection...) { }。我通常可以做一个确定性的Dispose(),但不能保证。我使用 Reflector 反汇编 SqlConnection 并看到它使用了 Dispose(),但除非我是盲人,否则没有终结器/析构函数(Finalize() 或 ~SqlConnection())。这是否意味着在我不能的奇怪情况下,GC 不会“清理”(发送回池)连接?我一直没能找到任何确定的...
【问题讨论】:
标签: .net idisposable sqlconnection finalizer