摸索ADO.NET連接池使用說明
下面詳細(xì)和準(zhǔn)確的介紹有關(guān)ADO.NET連接池的使用與維護(hù)問題,這些都是學(xué)習(xí)總結(jié)的相關(guān)經(jīng)驗(yàn),當(dāng)ADO.NET連接池當(dāng)出現(xiàn)故障轉(zhuǎn)移等錯誤時(shí),會自動清除池。下面就進(jìn)行詳細(xì)說明。
這意味著在執(zhí)行應(yīng)用程序期間,許多相同的連接將反復(fù)地打開和關(guān)閉。 為了使打開的連接成本最低,ADO.NET 使用稱為連接池的優(yōu)化方法。
連接池減少新連接需要打開的次數(shù)。 池進(jìn)程保持物理連接的所有權(quán)。 通過為每個給定的連接配置保留一組活動連接來管理連接。 ADO.NET連接池只要用戶在連接上調(diào)用 Open,池進(jìn)程就會檢查池中是否有可用的連接。 如果某個池連接可用,會將該連接返回給調(diào)用者,而不是打開新連接。 應(yīng)用程序?qū)υ撨B接調(diào)用 Close 時(shí),池進(jìn)程會將連接返回到活動連接池集中,而不是真正關(guān)閉連接。 連接返回到池中之后,ADO.NET連接池即可在下一個 Open 調(diào)用中重復(fù)使用。#t#
在初次打開連接時(shí),將根據(jù)完全匹配算法創(chuàng)建連接池,該算法將池與連接中的連接字符串關(guān)聯(lián)。 每個連接池都與一個不同的連接字符串相關(guān)聯(lián)。 打開新連接時(shí),如果連接字符串并非與現(xiàn)有池完全匹配,將創(chuàng)建一個新池。 按進(jìn)程、按應(yīng)用程序域、按連接字符串以及(在使用集成的安全性時(shí))按 Windows 標(biāo)識來建立池連接。 連接字符串還必須是完全匹配的;按不同順序?yàn)橥贿B接提供的關(guān)鍵字將分到單獨(dú)的池中。
在以下 C# 示例中創(chuàng)建了三個新的ADO.NET連接池對象,但是管理時(shí)只需要兩個連接池。 注意,根據(jù)為 Initial Catalog 分配的值,第一個和第二個連接字符串有所不同。
1: using (SqlConnection connection = new SqlConnection(
2: "Integrated Security=SSPI;Initial Catalog=Northwind"))
3: {
4: connection.Open();
5: // Pool A is created.
6: }
7:
8: using (SqlConnection connection = new SqlConnection(
9: "Integrated Security=SSPI;Initial Catalog=pubs"))
10: {
11: connection.Open();
12: // Pool B is created because the connection strings differ.
13: }
14:
15: using (SqlConnection connection = new SqlConnection(
16: "Integrated Security=SSPI;Initial Catalog=Northwind"))
17: {
18: connection.Open();
19: // The connection string matches pool A.
20: }
如果 MinPoolSize 在連接字符串中未指定或指定為零,池中的連接將在一段時(shí)間不活動后關(guān)閉。 但是,如果指定的 MinPoolSize 大于零,在 AppDomain 被卸載并且進(jìn)程結(jié)束之前,連接池不會被破壞。 ADO.NET連接池非活動或空池的維護(hù)只需要最少的系統(tǒng)開銷。
注意: