一个简单的示例
下面我们通过一个简单的示例来看连接池的使用:
首先我分别使用四个连接,其中第一个和第二个连接之间有10秒的等待时间:
String ConnectionString = "data source=.\\sql2012;database=AdventureWorks;uid=sa;pwd=sasasa"; SqlConnection cn1=new SqlConnection(ConnectionString); SqlCommand cmd1=cn1.CreateCommand(); cmd1.CommandText="SELECT * FROM dbo.ABCD"; cn1.Open(); cmd1.ExecuteReader(); cn1.Close(); Response.Write("连接关闭时间:"+DateTime.Now.ToLongTimeString()+"
"); System.Threading.Thread.Sleep(10000); SqlConnection cn2=new SqlConnection(ConnectionString); SqlCommand cmd2=cn2.CreateCommand(); cmd2.CommandText="SELECT * FROM dbo.ABCD"; cn2.Open(); cmd2.ExecuteReader(); cn2.Close(); Response.Write("连接关闭时间:"+DateTime.Now.ToLongTimeString()+"
"); SqlConnection cn3=new SqlConnection(ConnectionString); SqlCommand cmd3=cn3.CreateCommand(); cmd3.CommandText="SELECT * FROM dbo.ABCD"; cn3.Open(); cmd3.ExecuteReader(); cn3.Close(); Response.Write("连接关闭时间:"+DateTime.Now.ToLongTimeString()+"
"); System.Threading.Thread.Sleep(1500); SqlConnection cn4=new SqlConnection(ConnectionString); SqlCommand cmd4=cn4.CreateCommand(); cmd4.CommandText="SELECT * FROM dbo.ABCD"; cn4.Open(); cmd4.ExecuteReader(); cn4.Close(); Response.Write("连接关闭时间:"+DateTime.Now.ToLongTimeString()+"
");
下面我们通过Profile截图:
我们首先可以看到,每一次Close()方法都会触发exec sp_reset_connection
此外,我们在中间等待的10秒还可以看到SP51是不断的,剩下几个连接全部用的是SPID51这个连接,虽然Ado.net Close了好几次,但实际上物理连接是没有中断的。
因此可以看出,连接池大大的提升了效率。