.Net与Oracle地数据库连接池(Connection Pool)
.Net與Oracle的數據庫連接池(Connection Pool)
概述:
數據庫連接池允許應用程序重用已存在于池中的數據庫連接,以避免反復的建立新的數據庫連接。這種技術能有效提高應用程序的伸縮性,因為有限的數據庫連接能夠給大量的客戶提供服務。這種技術同時也提高的系統性能,避免了大量建立新連接的開銷。
| ? |
開發一個具有伸縮性的、高性能應用程序應該最大限度的減少建立連接所花費的時間,保持數據庫連接最大限度的有效,以存取數據。當一個數據庫連接關閉時,它只是由連接池收回以待重用,并未真正釋放。但是,如果連接池被釋放,數據庫連接將會被釋放掉。
開發人員應當注意不要依賴垃圾回收機制去釋放數據庫連接,因為當參數超出作用域時,數據庫連接并沒有得必要的關閉,這種數據庫資源泄漏將導致建立新連接時拋出連接錯誤。
建立數據庫連接池
當打開一個數據庫連接時,一個數據庫連接池也就創建了。數據庫連接池的創建與數據庫連接字符串精確的相關(包括空格、大小寫)。所有的連接池是根據連接字符串來區分的。在創建一個新的數據庫連接時,如果連接字符串不完全相同,將創建不同的連接池。
一旦數據庫連接池被創建,它將一直存在直到該進程結束。維護一個非活動狀態的連接池幾乎不需要什么系統開銷。
連接池中的數據庫連接
連接池根據唯一的連接字符串被創建。在連接池被創建的同時,連接池將創建最小的數據庫連接,當連接不夠用時,連接池將逐個添加數據庫連接直到達到 最大連接數,此后的連接請求將被加入請求隊列里。當調用數據庫連接對象的Close方法或Dispose方法時,數據庫連接將被數據庫連接池回收。
當數據庫連接使用完成后,要調用Close方法或Dispose方法將它返回連接池。沒有顯式釋放的數據庫連接可能會沒有返回連接池。
注意不要在類的Finalize方法中調用任何管理類如Connection,DataReader等的Finalize方法,必須將數據庫連接的釋放權交給連接池。
釋放數據庫連接
當數據庫連接超時或服務已經完成時,連接池將會將其資源釋放,這只能通過試圖與數據庫通訊來判斷。如果發現數據庫連接不可用,它將被標記為不可用資源。數據庫連接池將定時掃描數據庫連接,釋放所有不可用資源。
如果發現現有的數據庫連接不可用,那么可能是該連接被數據庫連接池標記為不可用資源了,這時將拋出一個異常。盡管如此,你還是必須釋放連接,將它返回連接池。
支持Transaction
數據庫連接池內的數據庫連接是按照Transaction Context劃分的,每當連接池接到連接請求時,他將返回與請求者Transaction Context相匹配的數據庫連接。因此,每個連接池都由數個Transaction Context相關的數據庫連接和一個Transaction Context無關的數據庫連接組成。當數據庫連接被返回連接池時,它將被放回對應的Transaction Context組中。
用連接字符串關鍵字控制數據庫連接池
OracleConnection對象的屬性ConnectionString有一些能支持連接池控制的key-value字符串。下表是這些key-value字符串的詳細說明。
名稱
默認值
說明
Connection Lifetime
0
當數據庫連接被返回到連接池中時,它的創建時間將與當前時間比較,如果超過了Connection Lifetime規定的時間,它將被釋放掉。
為0時將被視為最大連接時間。
Enlist
'true'
當此值為true時,池中現存的所有數據庫連接將被加入到它的創建線程的Transaction Context中。如果不存在這個Transaction Context則無任何變化。
Max Pool Size
100
連接池能建立的最大數據庫連接數。
Min Pool Size
0
連接池要保持的最小數據庫連接數。
Pooling
'true'
當設為true時,數據庫連接將由相應的連接池管理。
總結
以上是生活随笔為你收集整理的.Net与Oracle地数据库连接池(Connection Pool)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卢布兑换人民币是否还会下降(卢布兑换人民
- 下一篇: asp.net textbox 控件如何