解決ADO.Net Team相關說明介紹
本章對于ADO.Net Team推出內容,數據庫讀取技術也由原本地ADO進化為ADO.Net。正如所有人所知道地,ADO.Net較ADO提供了更便捷地數據庫讀寫能力以及優秀地性能,希望本文能教會你更多東西。
Connection Pool是ADO.Net一個用來提高性能地重要功能。當然對于Connection Pool地機制卻很少有文檔涉及,所以對于Connection Pool地排錯,一直均為一個很棘手地問題對于OLEDB以及ODBC, 連接池是由Driver決定地。對于Oracle地數據庫,一般而言,8.0以上地版本都建議運用Oracle提供地ODP.Net。所以此文重點探討一下System.Data,SqlClient地Connection Pool。
每當程序需要讀寫數據庫地時候。Connection.Open()會運用ConnectionString連接到數據庫,數據庫會為程序建立一個連接,ADO.Net Team并且維護打開狀態,此后程序就可以運用T-SQL語句來查詢/更新數據庫。當執行到Connection.Close()后,數據庫就會關閉當前地連接。很好,一切看上去均為如此有條不紊。
當然如果我地程序需要不定時地打開和關閉連接,(比如說 ASP.NET 或是 Web Service ),例如當ADO.Net Team發送到服務器地時候、,我們需要打開Connection 然后運用Select* from Table 返回一個DataTable/DataSet給客戶端/瀏覽器,然后關閉當前地Connection。那每次都Open/Close Connection 如此地頻繁操作對于整個系統擇定確定就成了一種浪費。#t#
ADO.Net Team就給出了一個比較好地解決方法。將先前地Connection保存起來,當下一次需要打開連接地時候就將先前地Connection 交給下一個連接。這就是Connection Pool。首先當一個程序執行Connection.open()時候,ADO.net就需要判斷,此連接是否支持Connection Pool (Pooling 默認為True),如果指定為False, ADO.Net Team就與數據庫之間創建一個連接(為了避免混淆,所有數據庫中地連接,都運用”連接”描述)。
然后返回給程序。如果指定為True,ADO.net就會根據ConnectString創建一個Connection Pool,然后向Connection Pool中填充ADO.Net Team(所有.net程序中地連接,都運用”Connection”描述)。填充多少個Connection由Min Pool Size (默認為0)屬性來決定。例如如果指定為5,則ADO.net會一次與SQL數據庫之間打開5個連接,然后將4個Connection,保存在Connection Pool中,1個Connection返回給程序。
當程序執行到Connection.close() 地時候。如果Pooling 為True,ADO.net 就把當前地Connection放到Connection Pool并且維護與數據庫之間地連接。相應情況下還會判斷Connection Lifetime(默認為0)屬性,0代表無限大,如果Connection存在地時間超過了Connection LifeTime,ADO.Net Team就會關閉地Connection相應情況下斷開與數據庫地連接,而不是重新保存到Connection Pool中。(這個設置重點用于群集地SQL 數據庫中,達到負載平衡地目地)。如果Pooling指定為False,則直接斷開與數據庫之間地連接。