Winforms 关闭Access Jet OLEDB连接的最佳方法
在我的winform应用程序framework 3.5 sp1中,我有一个自定义数据读取器。我必须选择关闭连接的方式 第一种方式: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() ' ...
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.