1,對(duì)于ASP.NET數(shù)據(jù)庫(kù)連接池可以使用一組名稱-值對(duì)以鏈接字符串的形式配置鏈接池。例如,可以配置池是否有效(默認(rèn)是有效的),池的最大、最小容量,用于打開鏈接的排隊(duì)請(qǐng)求被阻斷的時(shí)間。下面的示例字符串配置了池的最大和最小容量。 "Server=(local); Integrated Security=SSPI; Database=Northwind; Max Pool Size=75; Min Pool Size=5" ASP.NET數(shù)據(jù)庫(kù)連接池摘要 連接池允許應(yīng)用程序從連接池中獲得一個(gè)連接并使用這個(gè)連接,而不需要為每一個(gè)連接請(qǐng)求重新建立一個(gè)連接。一旦一個(gè)新的連接被創(chuàng)建并且放置在連接池中,應(yīng)用程序就可以重復(fù)使用這個(gè)連接而不必實(shí)施整個(gè)數(shù)據(jù)庫(kù)連接創(chuàng)建過程。 當(dāng)應(yīng)用程序請(qǐng)求一個(gè)連接時(shí),連接池為該應(yīng)用程序分配一個(gè)連接而不是重新建立一個(gè)連接;當(dāng)應(yīng)用程序使用完連接后,該連接被歸還給連接池而不是直接釋放。 2, 連接池減少新連接需要打開的次數(shù)。池進(jìn)程保持物理連接的所有權(quán)。通過為每個(gè)給定的連接配置保留一組活動(dòng)連接來(lái)管理連接。只要用戶在連接上調(diào)用 Open,池進(jìn)程就會(huì)檢查池中是否有可用的連接。如果某個(gè)池連接可用,會(huì)將該連接返回給調(diào)用者,而不是打開新連接。應(yīng)用程序在該連接上調(diào)用 Close 時(shí),池進(jìn)程會(huì)將連接返回到活動(dòng)連接池集中,而不是真正關(guān)閉連接。連接返回到池中之后,即可在下一個(gè) Open 調(diào)用中重復(fù)使用。 只有配置相同的連接可以建立池連接。ADO.NET 同時(shí)保留多個(gè)池,每個(gè)配置一個(gè)池。連接由連接字符串以及 Windows 標(biāo)識(shí)(在使用集成的安全性時(shí))分為多個(gè)池。 池連接可以大大提高應(yīng)用程序的性能和可縮放性。默認(rèn)情況下,ADO.NET 中啟用連接池。除非顯式禁用,否則,連接在應(yīng)用程序中打開和關(guān)閉時(shí),池進(jìn)程將對(duì)連接進(jìn)行優(yōu)化。還可以提供幾個(gè)連接字符串修飾符來(lái)控制連接池的行為 池的創(chuàng)建和分配 在初次打開連接時(shí),將根據(jù)完全匹配算法創(chuàng)建連接池,該算法將池與連接中的連接字符串關(guān)聯(lián)。每個(gè)連接池與不同的連接字符串關(guān)聯(lián)。打開新連接時(shí),如果連接字符串并非與現(xiàn)有池完全匹配,將創(chuàng)建一個(gè)新池。按進(jìn)程、按應(yīng)用程序域、按連接字符串以及(在使用集成的安全性時(shí))按 Windows 標(biāo)識(shí)來(lái)建立池連接。 在以下 C# 示例中創(chuàng)建了三個(gè)新的 SqlConnection 對(duì)象,但是管理時(shí)只需要兩個(gè)連接池。注意,根據(jù)為 Initial Catalog 分配的值,第一個(gè)和第二個(gè)連接字符串有所不同。
using (SqlConnection connection = new SqlConnection( "Integrated Security=SSPI;Initial Catalog=Northwind")) { connection.Open(); // Pool A is created. } using (SqlConnection connection = new SqlConnection( "Integrated Security=SSPI;Initial Catalog=pubs")) { connection.Open(); // Pool B is created because the connection strings differ. } using (SqlConnection connection = new SqlConnection( "Integrated Security=SSPI;Initial Catalog=Northwind")) { connection.Open(); // The connection string matches pool A. }