【问题标题】:Best way to close Access Jet OledbConnection关闭 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

第二种方式是关闭连接的垃圾收集器。什么是更好的? 谢谢! 皮莱吉

【问题讨论】:

    标签: winforms ms-access connection oledb


    【解决方案1】:

    最好是使用using块,一旦你移出块,它就会处理对象。

    绝不能等待让 GC 关闭数据库连接。我们永远无法预测 GC 收集对象的执行时间。

    【讨论】:

    • 关于使用 Using 块的要点。即使遇到异常,它也允许关闭连接。 +1
    【解决方案2】:

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

    来自MSDN

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

    系统物理内存不足。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2010-12-01
      • 2010-09-07
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      相关资源
      最近更新 更多