連接池

連接池   打開與關閉數據庫都是比較耗時的。爲此,ADO.NET自動將數據庫連接存放在連接池中。
連接池可以大幅度提高程序的性能和效率,因爲我們不必等待建立全新的數據庫連接過程,
而是直接利用現成的數據庫連接。注意,利用Close()方法關閉連接時,並不是實際關閉連接,
而是將連接標爲未用,放在連接池中,準備下一次複用。   如果在連接字符串中提供相同的細節,
即相同的數據庫,用戶名,密碼等等,則可以直接取得並返回池中的連接。然後可以用這個連接訪問數據庫。 
  使用SqlConnection對象時,可以在連接字符串中指定max pool size,表示連接池允許的最大連接數(默認爲100),
也可以指定min pool size表示連接池允許的最小連接數(默認爲0)。
下面的代碼指定了SqlConnection對象的max pool size爲10,min pool size爲5。
 SqlConnection mySqlConnection = new SqlConnection
("server=localhost;database=Northwind;integrated security=SSPI;"+"max pool size=10;min pool size=5"); 

  程序代碼說明:在上述範例的程序代碼中,程序最初在池中生成5個SqlConnection對象。池中可以存儲最多10個SqlConnection對象。
如果要打開新的SqlConnection對象時,池中的對象全部都在使用中,則請求要等待一個SqlConnection對象關閉,然後纔可以使用新的SqlConnection對象。
如果請求等待時間超過ConnectionTimeout屬性指定的秒數,則會拋出異常。 
  下面通過一個程序來顯示連接池的性能優勢。在應用此程序過程我們要先引用System.Data.SqlClinet和System.Text命名空間。 
  範例程序代碼如下: 01 public partial class _Default : System.Web.UI.Page 
02 { 
03 protected void Page_Load(object sender, EventArgs e) 
04 { 
05 //設置連接池的最大連接數爲5,最小爲1 
06 SqlConnection mySqlConnection =new SqlConnection( 
07 "server=localhost;database=Northwind;integrated security=SSPI;"+ 
08 "max pool size=5;min pool size=1"); 
09 //新建一個StringBuilder對象 
10 StringBuilder htmStr = new StringBuilder(""); 
11 for (int count = 1; count <= 5; count++) 
12 { 
13 //使用Append()方法追加字符串到StringBuilder對象的結尾處 
14 htmStr.Append("連接對象 "+count); 
15 htmStr.Append("<br>"); 
16 //設置一個連接的開始時間 
17 DateTime start = DateTime.Now; 
18 mySqlConnection.Open(); 
19 //連接所用的時間 
20 TimeSpan timeTaken = DateTime.Now - start; 
21 htmStr.Append("連接時間爲 "+timeTaken.Milliseconds+"毫秒"); 
22 htmStr.Append("<br>"); 
23 htmStr.Append("mySqlConnection對象的狀態爲" + mySqlConnection.State); 
24 htmStr.Append("<br>"); 
25 mySqlConnection.Close(); 
26 } 
27 //將StringBuilder對象的包含的字符串在label控件中顯示出來 
28 lblInfo.Text = htmStr.ToString(); 
29 } 
30 } 

  程序代碼說明:在上述範例的程序代碼中,我們將在連接池中重複5次打開一個SqlConnection對象,
DateTime.Now表示當前的時間。timeTaken表示從連接開始到打開連接所用的時間間隔。
可以看出,打開第一個連接的時間比打開後續連接的時間要長,因爲第一個連接要實際連接數據庫。
被關閉之後,這個連接存放在連接池中。再次打開連接時,只要從池中直接讀取即可,速度非常快。  
 提示:String 對象是不可改變的。每次使用 System.String 類中的方法之一時,
都要在內存中創建一個新的字符串對象,這就需要爲該新對象分配新的空間。
在需要對字符串執行重複修改的情況下,與創建新的 String 對象相關的系統開銷可能會非常昂貴。
如果要修改字符串而不創建新的對象,則可以使用 System.Text.StringBuilder 類
。例如,當在一個循環中將許多字符串連接在一起時,使用 StringBuilder 類可以提升性能。
Append 方法可用來將文本或對象的字符串表示形式添加到由當前
 StringBuilder 對象表示的字符串的結尾處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章