談?wù)凙DO.NET數(shù)據(jù)庫(kù)連接池創(chuàng)建和分配
連接數(shù)據(jù)庫(kù)是我們編程不可缺少的一部分,要保存數(shù)據(jù)就得連接數(shù)據(jù)庫(kù),這里我們就簡(jiǎn)單的看看ADO.NET數(shù)據(jù)庫(kù)連接。建立池連接可以顯著提高應(yīng)用程序的性能和可縮放性。SQL Server .NET Framework 數(shù)據(jù)提供程序自動(dòng)為 ADO.NET 客戶端應(yīng)用程序提供連接池。
ADO.NET數(shù)據(jù)庫(kù)連接池的創(chuàng)建和分配
當(dāng)連接打開(kāi)時(shí),將根據(jù)一種精確的匹配算法來(lái)創(chuàng)建連接池,該算法會(huì)使連接池與連接中的字符串相關(guān)聯(lián)。每個(gè)連接池都與一個(gè)不同的連接字符串相關(guān)聯(lián)。當(dāng)新連接打開(kāi)時(shí),如果連接字符串不精確匹配現(xiàn)有池,則將創(chuàng)建一個(gè)新池。在以下示例中,將創(chuàng)建三個(gè)新的 SqlConnection 對(duì)象,但只需要使用兩個(gè)連接池來(lái)管理這些對(duì)象。請(qǐng)注意,***個(gè)和第二個(gè)連接字符串的差異在于為 Initial Catalog 分配的值。
- SqlConnection conn = new SqlConnection();
 - conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
 - conn.Open();
 - // Pool A is created.
 - SqlConnection conn = new SqlConnection();
 - conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";
 - conn.Open();
 - // Pool B is created because the connection strings differ.
 - SqlConnection conn = new SqlConnection();
 - conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";
 - conn.Open();
 - // The connection string matches pool A.
 
連接池一旦創(chuàng)建,直到活動(dòng)進(jìn)程終止時(shí)才會(huì)被毀壞。非活動(dòng)或空池的維護(hù)只需要最少的系統(tǒng)開(kāi)銷。
ADO.NET數(shù)據(jù)庫(kù)連接的添加
連接池是為每個(gè)唯一的連接字符串創(chuàng)建的。當(dāng)創(chuàng)建一個(gè)池后,將創(chuàng)建多個(gè)連接對(duì)象并將其添加到該池中,以滿足最小池大小的要求。連接將根據(jù)需要添加到池中,直至達(dá)到***池大小。當(dāng)請(qǐng)求 SqlConnection 對(duì)象時(shí),如果存在可用的連接,則將從池中獲取該對(duì)象。若要成為可用連接,該連接當(dāng)前必須未被使用,具有匹配的事務(wù)上下文或者不與任何事務(wù)上下文相關(guān)聯(lián),并且具有與服務(wù)器的有效鏈接。
如果已達(dá)到***池大小且不存在可用的連接,則該請(qǐng)求將會(huì)排隊(duì)。當(dāng)連接被釋放回池中時(shí),連接池管理程序通過(guò)重新分配連接來(lái)滿足這些請(qǐng)求。對(duì) Connection 調(diào)用 Close 或 Dispose 時(shí),連接被釋放回池中。
#T#警告 建議使用完 Connection 后始終將其關(guān)閉,以便連接可以返回到池中。這可以使用 Connection 對(duì)象的 Close 或 Dispose 方法來(lái)實(shí)現(xiàn)。不是顯式關(guān)閉的連接可能不會(huì)添加或返回到池中。例如,如果連接已超出范圍但沒(méi)有顯式關(guān)閉,則僅當(dāng)達(dá)到***池大小而該連接仍然有效時(shí),該連接才會(huì)返回到連接池中。注意 不要在類的 Finalize 方法中對(duì) Connection、DataReader 或任何其他托管對(duì)象調(diào)用 Close 或 Dispose。在終結(jié)器中,僅釋放類直接擁有的非托管資源。如果類不擁有任何非托管資源,則不要在類定義中包含 Finalize 方法。有關(guān)更多信息,請(qǐng)參見(jiàn)垃圾回收編程。















 
 
 
 
 
 
 