[C#][Tips]如何確定Connection Pooling裡的Connection有效性

[C#][Tips]如何確定Connection Pooling裡的Connection有效性

之前有做個小實驗來驗證Dispose是否影響Connection Pooling,

得到結論是不會有任何影響,

但.Net Connection Pooling 也不保證或維護 connection pool 裡的connection正確性和有效性,

那該如何來避免呢?這裡大概提出我的看法。

 

1.不使用Connection Pooling

停用Connection Pooling就一定不會發生啥怪問題發生,

不過這是相當鳥人的處理方法,如果你的系統流量很大的話,

那不使用Connection Pooling將對Server Performance有很可觀的影響。

 

2.加入SqlException Handling並適時ReTry

針對之前的錯誤狀況我們來修改一下catch的邏輯。

...
...... 
catch( SqlException sqlex )
            {
                //攔截錯誤代碼並ReTry
                if( sqlex.State == 0 )
                    Disposejob();   
                //MessageBox.Show( sqlex.Message.ToString() );
            }
....
......

 

 

 

再度測試

image image

這時會有五條Connections。

 

Kill 專屬Connection

 image  image

只剩下四條Connections。

 

再執行Open Pooled Connections With Dispose

image image

由於修改了catch邏輯,所以應用程式沒有發生任何意外,也順利繼續執行,

唯一的缺點就是得再花時間重建立Connection。

 

再次執行Open Pooled Connections With Dispose

image

這樣5條Connections又正常reuse了。

 

如還有其他方法請再告訴我。

 

範例程式:TestConnectionPooling_P2.rar