我正在开发一个从Access数据库文件中获取数据的VB.NET项目。我遇到的所有代码snipeets都打开了数据库,为每个操作执行操作并关闭它。我目前在应用程序运行的整个过程中都打开了数据库,只在应用程序退出时关闭它。
我的问题是:为每个操作打开与DB文件的连接是否有好处,而不是在应用程序运行期间保持打开状态?
答案 0 :(得分:2)
在许多数据库系统中,最好只在使用时保持连接打开,因为打开的连接会消耗数据库中的资源。对于您的代码而言,尽可能少地了解正在使用的具体数据库(例如,通过对IDbConnection
等接口进行编程而不是具体类型为OleDbConnection
,这也是一种良好的做法。
出于这个原因,遵循保持连接尽可能少的连接的做法可能是一个好主意,无论它对您使用的特定数据库是否有意义。它简单地使你的代码更具可移植性,并且它增加了你不会出错的机会,以防你在下一个项目中碰巧违反保持连接打开的系统是一件坏事。
所以,你的问题应该被颠倒过来:通过保持连接打开可以获得什么?
答案 1 :(得分:1)
Jet / ACE数据库引擎没有任何好处。创建LDB文件(记录锁定文件)的成本非常高。您可以通过独占打开文件(如果它是单个用户)来避免这种情况,但我的感觉是打开独占比打开多用户慢。
打开和关闭连接的建议是基于数据库服务器位于连接另一端的假设。如果你考虑它是如何工作的,打开和关闭连接的成本非常小,因为数据库守护程序已经打开了数据文件,并通过内存中的结构(也许在磁盘上)处理动态锁定 - 我真的不喜欢一旦服务器启动并运行,它就已经存在,不知道它是如何在任何特定的服务器数据库中实现的。
使用Jet / ACE,所有用户都争夺两个文件,数据文件和锁定文件,并且设置它比创建与服务器数据库的新连接的增量成本要贵得多。
现在,在您的目标是使用Jet / ACE数据存储实现高并发性的情况下,可能需要在这些因素之间进行权衡,并且您可能会因为对连接更加吝啬而获得更高的并发性。但我会说,如果你进入Jet / ACE这个领域,你可能应该首先考虑升级到基于服务器的后端,而不是浪费时间优化Jet / ACE以获得环境。专为。而设计。