[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() );
}
....
......
再度測試
這時會有五條Connections。
Kill 專屬Connection
只剩下四條Connections。
再執行Open Pooled Connections With Dispose
由於修改了catch邏輯,所以應用程式沒有發生任何意外,也順利繼續執行,
唯一的缺點就是得再花時間重建立Connection。
再次執行Open Pooled Connections With Dispose
這樣5條Connections又正常reuse了。
如還有其他方法請再告訴我。