数据库连接池
.Net开发中通过ADO.NET数据提供程序访问数据库。在接触数据库连接DbConnection
时就被警告:“晚打开,早释放”。但连接的打开与释放做了些什么呢?本片给自己解惑。
数据库连接池
数据库连接:连接到数据库服务器是应用程序中耗费大量资源且相对较慢的操作。包括建立物理通道、与服务器进行初次握手、分析连接字符串信息、对连接进行身份验证、运行检查等等。为了避免这种反复操作ADO.NET提供了连接池。 连接池是根据连接字符串创建的
Open
连接池会查找可用的连接返回给用户
Close
将连接返回到连接池
连接的泄露
当连接只Open
不Close
或Dispose
时会造成该连接泄露,一直存在切无法使用,次数多了会报连接池内无可用的连接bug
。还用两种情况会造成连接“泄露”。
- 除非使用
CommandBehavior.CloseConnection
作为ExectuReader
参数,否则Close DataReader不会Close关联的连接注意 DataAdapter
的Fill
和Update
方法会自动打开和关闭连接。但是如果连接之前已经打开,其不会自动关闭。