11

在 C# 应用程序中,应该OleDBConnection创建一次,还是每次执行 SQL 语句时创建?

我正在查看其他人编写的 C# 代码。每个 SQL 语句之前都会创建一个对象,该OleDbConnection对象的连接字符串指向一个 MDB 数据库。

每次都创建一个 OleDbConnection 对象是否合适,还是应该在应用程序开始时创建对象并从那时起使用。

4

5 回答 5

7

根据使用 ADO.NET 的最佳实践

高性能应用程序在最短的时间内保持与正在使用的数据源的连接,并利用连接池等性能增强技术......

于 2010-08-11T13:27:54.157 回答
7

假设您的数据库可以使用连接池,那么您可能希望为每次调用数据库打开和关闭连接。这允许您仅在需要时才使用数据库连接的有限资源,然后在完成调用后将其返回池以供其他调用者使用。如果您坚持连接,您很快就会耗尽有限的资源,即与数据库的总可用连接,从而严重阻碍应用程序的可伸缩性和性能。

我通常使用 using 语句来确保使用后连接关闭 - 见下文:

  using (ODBCConnection c = new ODBCConnection(ConnectionString))
  {
    c.Command.CommandType = CommandType.Text;
    // make a call
  }

享受!

于 2010-08-11T13:28:26.393 回答
4

这取决于实际情况。

如果您要连续执行多个语句,那么在性能方面最好打开一次,执行所有语句,然后关闭它,

如果您询问在程序启动时打开连接并保持打开状态直到程序关闭,无论发生什么,那么没有。完成后立即关闭它。最好不要让连接处于打开状态。

人们似乎从来没有想到的另一个因素是维护程序员稍后会继续前进,他们必须跟踪代码并跟踪连接的打开位置和关闭时间。例如,假设您有一个程序访问数据库,然后分支到其他几个函数,每个函数都可能需要连接。在代码中跟踪这些东西是一场噩梦。

再说一次,这个因素对于正确的操作和性能来说是次要的,但在复杂的应用程序中仍然需要考虑。

主要因素是它将如何影响性能与保持连接打开的成本。您需要在每种情况下做出决定。

于 2010-08-11T13:23:39.627 回答
1

仅当您直接在数据库上执行活动时,才应打开与数据库的连接。在您的应用程序执行其他活动时保持与数据库的打开连接可能会在您的连接池达到其限制时阻止其他用户访问数据库。

如果您要在客户端 PC 上执行 CPU 密集型功能,则应在关闭连接后执行此任务,以免占用连接。

但是,如果您有一系列数据库功能要执行,则可以通过在单个打开的连接中一起执行这些功能来提高客户端的性能。

于 2010-08-11T15:00:28.780 回答
0

每次需要数据库中的某些内容时都应该打开一个连接,然后再关闭它。留给连接池来决定何时物理关闭连接。

于 2010-08-11T13:23:51.590 回答