個人對ADO連線池的理解

2022-03-16 11:58:02 字數 1192 閱讀 8308

說起連線池,我先舉個例子吧,

string constr = "data source=.;initial catalog=text;user id=sa;password=aaa123456";

stopwatch watch = new stopwatch();

watch.start();

for (int i = 0; i < 3000; i++)

}watch.stop();

console.writeline(watch.elapsed);      //用時:00:00:00.0996231

我們聽過秒錶計時可以看到,執行3000次的開啟關閉資料庫連線用時00:00:00.0996231

現在我禁用連線池:

string constr = "data source=.;initial catalog=text;user id=sa;password=aaa123456;pooling=false";(重複的**這裡就不寫了)

用時:00:00:05.9983207

可以看到同樣執行3000次的開啟關閉連線操作,用時相差差不多60倍!

這個主要就是我們建立了ado連線,在關閉的時候,連線被放到了乙個叫做ado連線池的東西裡面了,在下次開啟的時候直接從連線池開啟就好(前提是兩次連線字串必須一致,包括空格),而關閉連線池的話,那麼資料庫的連線與關閉就真的這樣一直開關開關的折騰了3000次。   不過連線池是預設啟用的

其實在系統內部,在sqlconnection建立連線以後,真正連線資料庫的是_innerconnection屬性,所以說當連線dispose以後,innerconnection屬性被放到了連線池裡,而con這個物件被銷毀。建立的con物件只是對_innerconnection屬性的乙個封裝,當下次再連線的時候如果連線字串一樣,雖然連線物件被銷毀了,但是真正連線資料庫的_innerconnection屬性並沒有銷毀,所以說就不用再建立連線。我們在sql資料庫裡面建立乙個跟蹤,可以看到啟用連線池就開啟了一次,連關閉都沒有,而關閉連線池開啟關閉連線池,跟蹤裡面login  longout好多行,顯然這就占用資源。

注意:1,連線池是在連線關閉的時候建立的

2,連線池一般是不禁用的,尤其在asp.net程式中,n多使用者同時訪問,並且大都訪問採用的是同乙個連線字串。

3,如果乙個程式有多個客戶端,每個客戶端採用的都是各自的連線字串,這時我們就禁用連線池,免得在池裡面儲存多個開啟的連線物件。

理解連線池

池化技術 pool 是一種很常見的程式設計技巧,在請求量大時能明顯優化應用效能,降低系統頻繁建連的資源開銷 日常工作中常見的有資料庫連線池 執行緒池 攜程池,物件池 它們的特點都是將 昂貴的 費時的 的資源維護在乙個特定的 池子 中,規定其最小連線數 最大連線數 阻塞佇列等配置,方便進行統一管理和復...

連線池與使用Tomcat的連線池

what is connection pool?看圖 1 存放connection物件的容器 2 減少連線資料庫的開銷 3 程式請求連線時,在connection pool中取連線 4 連線使用完後,放回connection pool,不釋放 5 connection pool對連線進行管理 計數 ...

mysql連線池的概念 連線池概念

1 連線池是乙個程序 多個連線是在乙個程序裡面儲存 管理的。這個程序儲存所有的連線,當我們開啟連線,如果有未用連線可用,則返回該連線。如果池中的連線都用完了,則建立乙個新的連線儲存到連線池。而但我們關閉連線的時候,連線池裡面並不關閉連線,而是返回連線池中並標記為可重用的狀態,等待重新連線直到等待超時...