一個簡單的示例
下面我們通過一個簡單的示例來看連接池的使用:
首先我分別使用四個連接,其中第一個和第二個連接之間有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("連接關(guān)閉時間:"+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("連接關(guān)閉時間:"+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("連接關(guān)閉時間:"+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("連接關(guān)閉時間:"+DateTime.Now.ToLongTimeString()+"
");
下面我們通過Profile截圖:
我們首先可以看到,每一次Close()方法都會觸發(fā)exec sp_reset_connection
此外,我們在中間等待的10秒還可以看到SP51是不斷的,剩下幾個連接全部用的是SPID51這個連接,雖然Ado.net Close了好幾次,但實際上物理連接是沒有中斷的。
因此可以看出,連接池大大的提升了效率。