关闭Access Jet OledbConnection的最佳方式

时间:2011-12-15 11:00:43

标签: winforms ms-access connection oledb

在我的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

2 个答案:

答案 0 :(得分:3)

最好是使用使用块,它会在您移出块后立即处理该对象。

必须永远等待以便GC关闭数据库连接。我们永远无法预测GC收集对象的执行时间。

答案 1 :(得分:2)

一般来说,您应该关闭自己打开的每个连接。垃圾收集不会保证何时会发生。您可能会发生泄漏并阻止将来的查询执行。

来自MSDN

  

当满足下列条件之一时,就会发生垃圾收集   真:

     

系统物理内存较低。

     

托管堆上已分配对象使用的内存   超过可接受的门槛。这意味着一个门槛   托管堆上已超出可接受的内存使用量。这个   随着过程的进行,阈值会不断调整。

     

调用GC.Collect方法。在几乎所有情况下,你都没有   调用此方法,因为垃圾收集器连续运行。   此方法主要用于独特的情况和测试。

如果你调用cn.close,你应该使用try catch finally块来确保连接总是在异常时关闭。