关闭 Access Jet OledbConnection 的最佳方式
Posted
技术标签:
【中文标题】关闭 Access Jet OledbConnection 的最佳方式【英文标题】:Best way to close Access Jet OledbConnection 【发布时间】:2011-12-15 11:00:43 【问题描述】:在我的 winform 应用程序 - framework 3.5 sp1 - 我有一个自定义数据阅读器。我必须选择关闭连接的方式
第一种方式:
Private cn As OleDb.OleDbConnection = Nothing
Public Sub Open()
cn = New OleDb.OleDbConnection(sConnectionString)
cn.Open()
' ...
End Sub
Public Sub Close()
' ...
cn.Close()
cn.Dispose()
End Sub
第二种方式:
Public Sub Open()
Dim cn As New OleDb.OleDbConnection(sConnectionString)
cn.Open()
' ...
End Sub
Public Sub Close()
' ...
End Sub
第二种方式是关闭连接的垃圾收集器。什么是更好的? 谢谢! 皮莱吉
【问题讨论】:
【参考方案1】:最好是使用using块,一旦你移出块,它就会处理对象。
您绝不能等待让 GC 关闭数据库连接。我们永远无法预测 GC 收集对象的执行时间。
【讨论】:
关于使用 Using 块的要点。即使遇到异常,它也允许关闭连接。 +1【参考方案2】:一般来说,您应该关闭自己打开的每个连接。垃圾收集不会给你任何关于它何时发生的保证。您可能会产生泄漏并阻止未来的查询执行。
来自MSDN:
当满足以下条件之一时,就会发生垃圾收集 真的:
系统物理内存不足。
托管堆上分配的对象使用的内存 超过可接受的阈值。这意味着阈值 托管堆上已超出可接受的内存使用量。这 随着进程的运行,阈值会不断调整。
GC.Collect 方法被调用。在几乎所有情况下,您都没有 调用此方法,因为垃圾收集器不断运行。 此方法主要用于特殊情况和测试。
如果你调用 cn.close,你应该使用 try catch finally 块来确保即使出现异常连接也总是关闭。
【讨论】:
以上是关于关闭 Access Jet OledbConnection 的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章