資料庫連線池提高系統執行效率

2022-02-07 11:10:30 字數 1722 閱讀 3809

最近在做乙個bs的系統,個人負責資料庫,後台,做了才發現資料庫也這般不簡單,特別還是空間資料庫,有的資料經常要重複讀取,在怎樣保持資料庫sqlconnection一直常開的問題中,看到了這篇文章,覺得還好,分享下!

摘自《asp.net 2.0揭秘 卷1》

資料庫連線是非常昂貴的資源,如果希望asp.net應用程式具有處理大量使用者請求的能力,那麼任何時候都不要浪費資料庫連線。

建立並開啟乙個資料連線是乙個很耗時的操作,每次需要使用資料庫時才去建立資料庫接的效率非常低,而更好的方法是建立乙個快取池存放在多次資料庫查詢中可能被重複使用的資料庫連線。

當連線池功能開啟後,執行關閉連線的操作並不會真正地關閉資料庫伺服器端的連線,而是通過這個關閉操作將連線放回到連線池中,這樣,當需要再次執行資料庫查詢時,就不用再重新開啟全新的資料庫連線了。

當使用sqlconnection 物件時,連線池是預設開啟的,在預設情況下,ado.net framework最多在連線池中保持100個開啟的連的接。

關於連線池功能必須注意兩件事情:

第一:在利用連線池功能時,呼叫sqlconnection.close()方法關閉連線。如果不顯式地關閉連線,當前正使用的連線就不會被放入到連線池中,雖然最終ado.net會**這些未關閉的連線,不過那可能需要很長的時間,並且無法確定連線到底會在什麼時候**。

第二:系統根據連線字串的不同,分別為其建立不同的連線池,更嚴格的來說,系統會分別為每個唯一的連線字串,過程,應用程式域和window標識建立連線池。系統將使用逐字比較的方法翻覆地比較連線字串。因此,應該將系統所用的連線字串存放在站點web.config中。盡量不要在元件**中硬編碼連字串。一旦兩字連線字串之間出現任何細微的差別,系統就會建立乙個新的連線池。

sqlconnection對應在編輯上提供了兩個清空連線池的方法:

1、 clearallpools-用於清空系統中所有的連線池裡的資料庫連線;

2、 clearpool-用於清空系統中指定連線池裡的資料庫連線。

可以使用以下連線字串中的屬性來控制連線的池化效果:

1、 connection timeout-用於指定以秒為單位的連線生存期最大值(預設值是0,表示連線永不失效) ;

2、 connection reset-用於指示是否自支重置來自連線池中的連線(預設值是true);

3、 enlist-用於指示是否將連線置入當前事務的上下文中(預設是true);

4、 load balance timeout-同connection timeout屬性;

5、 max pool size-用於指定儲存在連線池中的最大連線數(預設值是100);

6、 min pool size-用於指定儲存在連線池中最小的連線數(預設值是0);

7、 pooling -用於指定是否啟用連池功能(預設為true)。

例:web.config中

connectionstring="min pool size=10;

max pool size=100;

connection timeout=10;

data source=www;

initial catalog=supermapdata;

integrated security=true"

providername="system.data.sqlclient"/>

複製**

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

資料庫連線池與非連線池效率的直觀對比

如果網路狀況複雜 每次連線耗時更長 的情況下,使用連線池的優勢將更加明顯。執行結果 執行100次,共耗費109毫秒 非池執行100次,共耗費4422毫秒 執行200次,共耗費141毫秒 非池執行200次,共耗費8031毫秒 執行300次,共耗費219毫秒 非池執行300次,共耗費11812毫秒 測試...

資料庫連線池

實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...