Winforms 关闭Access Jet OLEDB连接的最佳方法

Winforms 关闭Access Jet OLEDB连接的最佳方法,winforms,ms-access,connection,oledb,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() ' ...

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

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

发件人:

当满足下列条件之一时,会发生垃圾回收 正确:

系统的物理内存不足

托管堆上已分配对象使用的内存 超过可接受的阈值。这意味着 托管堆上已超过可接受的内存使用率。这 阈值在进程运行时不断调整

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


如果您调用cn.close,您应该使用try-catch-finally块来确保即使出现异常,连接也始终关闭。

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

发件人:

当满足下列条件之一时,会发生垃圾回收 正确:

系统的物理内存不足

托管堆上已分配对象使用的内存 超过可接受的阈值。这意味着 托管堆上已超过可接受的内存使用率。这 阈值在进程运行时不断调整

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


如果调用cn.close,则应使用try-catch-finally块,以确保即使出现异常,连接也始终关闭。

最好使用using块,它将在您移出块后立即处理对象


您决不能等待GC关闭db连接。我们永远无法预测GC收集对象的执行时间。

最好使用使用块,它将在您移出块后立即处理对象


您决不能等待GC关闭db连接。我们永远无法预测GC收集对象的执行时间。

关于使用using块的要点。它允许连接关闭,即使遇到异常+1关于使用using块的实心点。它允许连接关闭,即使遇到异常+1.