漫谈ADO.NET连接池相关注意问题说明

开发 后端
SQLServer的ADO.NET连接池数量都减少一。由于不使用连接池,每次Close连接的时候Data Provider需要把“逻辑连接”和“物理连接”都销毁了。

ADO.NET连接池是Data Provider提供的一个机制,使得应用程序使用的连接保存在连接池里而避免每次都要完成建立/关闭连接的完整过程。要理解连接池,首先要了解程序里“物理连接”的关系。

Data Provider在收到连接请求时建立连接的完整过程是:先连接池里建立新的连接(即“逻辑连接”),然后建立该“逻辑连接”对应的“物理连接”。建立“逻辑连接”一定伴随着建立“物理连接”。

Data Provider关闭一个连接的完整过程是先关闭“逻辑连接”对应的“物理连接”然后销毁“逻辑连接”。销毁“逻辑连接”一定伴随着关闭“物理连接”。SqlConnection.Open()是向Data Provider请求一个连接,Data Provider不一定需要完成建立连接的完整过程。#t#

可能只需要从连接池里取出一个可用的连接就可以;SqlConnection.Close()是请求关闭一个连接,Data Provider不一定需要完成关闭连接的完整过程,可能只需要把连接释放回连接池就可以。

下面以一个例子来说明。本文例子都使用Console Application。我们使用操作系统的性能监视器来比较使用连接池与否,数据库的“物理连接”数量的不同。因为性能监视器至少每一秒采集一次数据,为方便观察效果,代码中Open和Close连接后都Sleep一秒。

  1. SqlConnection con = new SqlConnection("server = .; 
  2.  database = northwind;pooling = false;trusted_connection = true"); 
  3.  for(int i = 0;i < 10;i++)  {  try  {  con.Open();  System.Threading.Thread.Sleep(1000);  
  4. }  
  5. catch(Exception e){Console.WriteLine(e.Message);}  finally  {  con.Close();  System.Threading.Thread.Sleep(1000);  }   
  6. }   

首先,不使用ADO.NET连接池做测试。以上程序中pooing = false表示不使用连接池,程序使用同一个连接串Open & Close了10次连接,使用性能计数器观察SQL Server的“物理连接”数量。

从下面的锯齿图可以看出每执行一次con.Open(),SQLServer的“ADO.NET连接池”数量都增加一,而每执行一次con.Close(),SQLServer的“物理连接”数量都减少一。由于不使用连接池,每次Close连接的时候Data Provider需要把“逻辑连接”和“物理连接”都销毁了,每次Open连接的时候Data Provider需要 建立“逻辑连接”和“物理连接”,锯齿图因此而成。

责任编辑:chenqingxiang 来源: csdn
相关推荐

2009-12-23 09:14:52

ADO.NET连接池

2009-12-29 14:24:40

使用ADO.NET

2009-12-23 09:01:15

ADO.NET连接池

2009-12-22 15:33:33

ADO.NET参数

2009-12-23 14:53:28

ADO.NET连接池

2009-12-29 13:40:24

使用ADO.NET

2009-11-03 16:51:04

ADO.NET连接池观

2009-11-13 13:11:37

ADO.NET连接池

2010-01-04 14:40:51

ADO 检索

2009-12-21 17:39:02

ADO.NET操作

2009-11-12 09:25:21

ADO.NET连接池

2009-11-11 14:04:14

ADO.NET连接池

2010-01-05 10:11:23

ADO.NET连接池

2009-11-03 15:58:22

2010-02-25 09:06:40

ADO.NET连接池

2009-12-30 16:22:58

ADO.NET连接池

2009-07-20 14:03:43

Ado.net连接池

2009-12-24 09:49:02

ADO.Net连接池

2009-12-23 16:31:04

ADO.NET EF

2009-06-26 14:41:48

ADO.NET
点赞
收藏

51CTO技术栈公众号