上篇博客介紹了臨時表的使用,以及它的生命週期和鏈接池的關係。那麼爲了能更好的把握臨時表的產生和消亡,本篇博客就介紹Vb.net鏈接池。在打開和關閉數據庫鏈接時的耗費的資源是很是高的。那麼在程序須要頻繁的操做數據庫時就將影響程序的性能。那麼爲了提升資源的利用率,以及程序的性能VB.NET中就使用了一種鏈接數據庫的機制,即鏈接池。先看一張圖:數據庫
你們從圖中能夠看出,鏈接池是保存與數據庫內部鏈接的一個區域,它和應用程序是不直接相連的。換句話說就是解耦了。那麼它的工做機制是這樣的:應用程序須要訪問數據庫時,先建立一個Sqlconnection對象,而後去鏈接池中匹配合適的鏈接。若是存在合適的鏈接就直接使用,當沒有合適的鏈接時才從新建立一個鏈接。那麼當建立鏈接的對象Close或者Dispose時,程序也不銷燬鏈接而是歸還給鏈接池,以便下次使用。可是對於鏈接池咱們還須要作一些更細緻的瞭解。例如:匹配鏈接、內部鏈接什麼時候被銷燬,什麼時候建立等等問題。性能
如何匹配鏈接:在鏈接池中認爲,只有鏈接字符串徹底同樣時纔是相同的鏈接。例如咱們在機房收費系統中用的鏈接字符串只有一個。也就是說,每個內部鏈接都是同樣的,只要鏈接池中存在內部鏈接就能夠被Sqlconnection匹配使用。連接池的行爲實在SQLConnection對象的ConnectionString屬性來控制的,接下來了解其中的參數。 spa
MinPool Size(鏈接池的最小容量):鏈接池容許的鏈接數的最小值,其缺省值爲0。當連接池中空閒的內部鏈接大於最小容量時,多餘的鏈接將被銷燬。即鏈接池中至少會保持最小容量的鏈接數。.net
Connection Lifetime(連接生存時間):當一個鏈接被返回到鏈接池時,它的建立時間會與當前時間進行對比。若是這個時間跨度超過了鏈接的有效期的話,鏈接就被取消。其缺省值爲0,即不限時間。同時須要知道的是隻有在鏈接被釋放回鏈接池時才檢查該鏈接的Connection lifetime,也就是說當鏈接被使用或者空閒時是不檢查Connection lifetime。因此,大部分鏈接的生存時間都要大於規定的值。另外,鏈接池中最小容量的鏈接時不被connection lifetime限制的。對象
Max pool size(鏈接池最大鏈接數):鏈接池容許的最大鏈接數,當鏈接池中存在最大鏈接數時,新的鏈接將不被創建,該鏈接請求就要等候直到有空閒的鏈接。這裏須要很是注意DataReader的使用。生命週期
綜合以上內容,咱們再回顧一下上一篇博客臨時表的使用問題。由於在機房收費系統中咱們使用的鏈接字符串僅有一個,即認爲內部鏈接都是同樣的。又由於臨時表的生存週期依賴內部鏈接,並且咱們沒法控制內部鏈接的實際銷燬實際那。因此咱們的最小鏈接池的數量不能是0,即保證有效的內部鏈接存在,這就保持了臨時表的生存,不會再程序運行中間就被銷燬。那麼,到這裏臨時表和鏈接池的介紹就完結了。下面是,我認爲合理的鏈接字符串:資源
"Datasource=.\SQLExpress;Initial Catalog="數據庫名";Connection Lifetime= 10;Min pool size=1;User ID=sa;password=123456"字符串