5

我一直认为最好使用和关闭数据库连接。但是对于 SQLite,我不确定这是否适用。我使用 Using Connection 语句进行所有查询。所以我的理解是我打开一个连接然后关闭它这样做。当谈到 SQLite 和最佳使用时,是在程序使用期间打开一个永久连接更好,还是继续使用我当前使用的方法。

我正在将数据库用于 VB.net windows 程序,其数据库相当大,约为 2gig。

我当前的连接方法示例

  Using oMainQueryR As New SQLite.SQLiteCommand
            oMainQueryR.CommandText = ("SELECT * FROM CRD")
            Using connection As New SQLite.SQLiteConnection(conectionString)
                Using oDataSQL As New SQLite.SQLiteDataAdapter
                    oMainQueryR.Connection = connection
                    oDataSQL.SelectCommand = oMainQueryR
                    connection.Open()
                    oDataSQL.FillSchema(crd, SchemaType.Source)
                    oDataSQL.Fill(crd)
                    connection.Close()
                End Using
            End Using
    End Using
4

3 回答 3

1

如果它是仅由一个用户使用的本地应用程序,我认为在应用程序的生命周期内保持一个连接打开是可以的。

于 2013-01-18T21:27:49.367 回答
1

我认为对于大多数数据库,“最佳使用和关闭”的想法来自通过确保您只需要打开最少数量的连接来节省内存的角度。

实际上,打开连接可能会产生大量开销,应在需要时进行。这就是托管服务器基础架构(weblogic 等)促进使用连接池的原因。通过这种方式,您N可以获得在任何给定时间都可以使用的连接。您永远不会“浪费”资源,但您也没有责任在全球范围内管理它们。

于 2013-01-18T21:28:18.227 回答
1

与所有事物数据库一样,这取决于。在 sqlite 的这种特定情况下,您需要查看两个“依赖项”:

  1. 你是数据库的唯一用户吗?
  2. 何时提交隐式事务?

对于第一项,如果有其他数据库用户,或者如果有多个进程同时访问您的 sqlite 数据库文件,您可能希望频繁地打开/关闭不同的连接。

对于第二项,我不确定 sqlite 的具体表现如何。一些数据库引擎在连接关闭之前不会提交隐式事务。如果 sqlite 是这种情况,您可能希望更频繁地关闭连接。

.Net 中的连接应该是短暂的这一想法主要适用于 Microsoft Sql Server,因为 Sql Server 的 .Net 提供程序也能够利用称为连接池的功能。在 Sql Server 之外,这个建议并非完全没有价值,但也不是那么理所当然。

于 2013-01-18T21:29:48.960 回答