在我的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
第二种方式是关闭连接的垃圾收集器。什么是更好的? 谢谢! Pileggi
答案 0 :(得分:3)
最好是使用使用块,它会在您移出块后立即处理该对象。
您必须永远等待以便GC关闭数据库连接。我们永远无法预测GC收集对象的执行时间。
答案 1 :(得分:2)
一般来说,您应该关闭自己打开的每个连接。垃圾收集不会保证何时会发生。您可能会发生泄漏并阻止将来的查询执行。
来自MSDN:
当满足下列条件之一时,就会发生垃圾收集 真:
系统物理内存较低。
托管堆上已分配对象使用的内存 超过可接受的门槛。这意味着一个门槛 托管堆上已超出可接受的内存使用量。这个 随着过程的进行,阈值会不断调整。
调用GC.Collect方法。在几乎所有情况下,你都没有 调用此方法,因为垃圾收集器连续运行。 此方法主要用于独特的情况和测试。
如果你调用cn.close,你应该使用try catch finally块来确保连接总是在异常时关闭。