標籤:style blog io ar color os sp for on
//啟用串連池 string constr = "Data Sourse=zxtiger; Initial Catalog=itcastcn;Integrated Security=True"; Stopwatch watch = new Stopwatch(); watch.Start(); for (int i = 0; i < 2000; i++) { using (SqlConnection con = new SqlConnection(constr)) { con.Open(); con.Close(); } } watch.Stop(); Console.WriteLine(watch.Elapsed); Console.ReadKey();
//啟用串連池後,只執行一次串連操作
//禁用串連池 string constr = "Data Sourse=zxtiger; Initial Catalog=itcastcn;Integrated Security=True;Pooling=false"; Stopwatch watch = new Stopwatch(); watch.Start(); for (int i = 0; i < 2000; i++) { using (SqlConnection con = new SqlConnection(constr)) { con.Open(); con.Close(); } } watch.Stop(); Console.WriteLine(watch.Elapsed); Console.ReadKey();
串連池預設是開啟的,當串連池被禁用後
//00:00:00.1383385
//00:00:03.9974913
前後相差29被
所謂的串連池,就是一個與連線物件Connection相關的集合,這不只是簡單的集合,而是有一定的機制在內部。我們做開發時,可能建立Connection連線物件,關閉連線物件,有時候還調用Dispose來釋放串連。下次再用時,便重新執行個體化一個串連。但在池中的串連不隨連線物件的Close或Dispose而釋放。如果下次重建立立串連,連接字串與前一次完全一模一樣,則串連池就會把上次可用的連線物件賦給串連去用。如果兩個連接字串有一點不一樣,即使在某一個地方多一個空格,串連池也不會以為是相同的串連,這點微軟可能在內部只直接去比較兩個字串了,而不是比較串連資料庫字串的索引值互相匹配。
串連池的好處就是保留連線物件,防止下次重頭再來執行個體化一個連線物件。
由於每次正常串連資料庫至少執行3個操作(1.登陸資料庫伺服器2.執行操作3.登出使用者),所以每次通過Connection向資料庫伺服器申請一個串連都比較耗時【ado.net預設啟用了串連池】
ado.net串連池效果