資料庫連線池的作用

2021-10-02 15:50:39 字數 1702 閱讀 4354

一、問題引入

首先看段**:

string connstr =

"data source = desktop-8si7gc4;initial catalog = myschool;integrated security = true;"

sqlconnection conn =

newsqlconnection

(connstr)

; conn.

open()

;//並沒有釋放這個物件,只是將連線狀態關閉,同時清空連線字串。

//重新設定conn的connectionstring,即可重新連線證實了這點。

conn.

dispose()

; conn.connectionstring = connstr;

conn.

open()

;

一般來說,物件呼叫dispose()方法之後立即被銷毀,在記憶體中不復存在。但conn連線物件比較特別。conn呼叫dispose()方法之後,系統並沒有釋放這個物件,只是將其連線狀態關閉,同時清空連線字串。重新設定conn的connectionstring,即可重新連線證實了這點。類似字串。字串儲存在記憶體中的常量區。當我們建立乙個字串時,系統會先查明該字串是否存在常量區。如果存在,直接返回這個字串的位址。否則就新建乙個字串。

那為什麼conn呼叫dispose()方法之後沒有被銷毀呢?很好理解,為了節省記憶體和時間啊。只是,這涉及到了連線池。

二、示例

看下在有無連線池的兩種情況下,建立1000個連線物件所耗費的時間。

有連線池:

stopwatch sw =

newstopwatch()

; sw.

start()

;for

(int i =

0; i <

1000

; i++

) sw.

stop()

; messagebox.

show

(sw.elapsed.

tostring()

);

結果:0.1438238s

無連線池:在連線字串後新增了 +「pooling = false」 ,預設為true。

stopwatch sw =

newstopwatch()

; sw.

start()

;for

(int i =

0; i <

1000

; i++

) sw.

stop()

; messagebox.

show

(sw.elapsed.

tostring()

);

結果:4.1383434s

三、連線池的作用

簡單說,儲存連線通道物件。但它是如何達到節省時間和空間的目的呢?

當乙個連線通道使用完後,系統並不會將其釋放,而是將它儲存在連線池裡。下次需要使用連線通道的時候,系統會判斷連線池裡是否有空閒的連線通道物件。如果有,設定其連線字串,修改其連線狀態,重新使用。

mysql 連線池的作用 資料庫連線池的作用

對於乙個簡單的資料庫應用,由於對於資料庫的訪問不是很頻繁。這時可以簡單地在需要訪問資料庫時,就新建立乙個連線,用完後就關閉它,這樣做也不會帶來什麼明顯的效能上的開銷。但是對於乙個複雜的資料庫應用,情況就完全不同了。頻繁的建立 關閉連線,會極大的減低系統的效能,因為對於連線的使用成了系統效能的瓶頸。連...

資料庫連線池的作用

對於乙個簡單的資料庫應用,由於對於資料庫的訪問不是很頻繁。這時可以簡單地在需要訪問資料庫時,就新建立乙個連線,用完後就關閉它,這樣做也不會帶來什麼明顯的效能上的開銷。但是對於乙個複雜的資料庫應用,情況就完全不同了。頻繁的建立 關閉連線,會極大的減低系統的效能,因為對於連線的使用成了系統效能的瓶頸。連...

Spring 資料庫連線池的作用

引用 引用對於乙個簡單的資料庫引用,用於對資料庫的訪問不是很頻繁。這時就可以簡單的在需要訪問資料庫是,就建立乙個連線,用完後就關閉它,這樣做也不會帶來什麼明顯的效能上的開銷。但是對於乙個複雜的資料庫引用,情況就完全不同了。頻繁的建立 關閉連線,會極大的減低系統的效能,因為對於連線的使用成了系統效能的...