2013-01-18 46 views
2

我一直在理解数据库连接最好使用和关闭。但是,SQLite Im不确定这是否适用。我使用“使用连接”表达式完成所有查询。所以这是我的理解,我打开一个连接,然后关闭它,这样做。说到SQLite和最佳用法,最好在正在使用的程序期间打开一个permament连接,还是继续使用我当前使用的方法。SQLite,打开一个永久连接或不是?

我正在使用数据库的VB.net窗口程序相当大的数据库大约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 

回答

1

与所有东西数据库一样,这取决于。在这个特定的情况下,你需要看两个“依赖”:

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

对于第一项,如果有数据库的其他用户或者如果所有可能的情况是多个进程同时触发您的sqlite数据库文件,您可能希望经常打开/关闭不同的连接。

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

连接在.Net中应该是短暂的想法主要适用于Microsoft Sql Server,因为Sql Server的.Net提供程序也可以利用称为连接池的功能。除了Sql Server之外,这个建议并不完全没有优点,但它并不像给定的那么多。

1

如果是正在使用的只有一个用户的本地应用程序,我认为它是好的,保持一个连接打开的应用程序的生命。

1

我认为,对于大多数数据库而言,“最佳使用和关闭”思想来自保存内存的角度,确保只有最少的连接数需要打开。

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

+0

它不一定只是关于内存......它也关于总数允许的有限数量的活动连接,关于事务日志大小和频繁的事务提交。 –

+0

我道歉我是代码猴,但我正在尝试在业余时间更多地了解软件架构和优化。我是否正确地认为提交和日志记录的数量在IO级别更重要? – Colton