這個Dispose跟Connection Pooling的影響,其實RiCoisme已有寫過一篇[ [C#] [Tips]Dispose是否影響Connection Pooling? ],而這篇之所以又再寫一次,主要是最近有朋友因為看了RiCoisme的前一篇之後,開始懷疑Oracle是否也有這個問題,雖然有第二篇的證實 Dispose跟Connection Pooling的問題,但驗證的是使用MS SQL,不知道Oracle是否也有同樣的情況,所以朋友反而比較容易接受第一篇的結論,為此,才又做了相同的測試,只不過這次用的是Oracle.
這個Dispose跟Connection Pooling的影響,其實RiCoisme已有寫過一篇[ [C#] [Tips]Dispose是否影響Connection Pooling? ],而這篇之所以又再寫一次,主要是最近有朋友因為看了RiCoisme的前一篇之後,開始懷疑Oracle是否也有這個問題,雖然有第二篇的證實Dispose跟Connection Pooling的問題,但驗證的是使用MS SQL,不知道Oracle是否也有同樣的情況,所以朋友反而比較容易接受第一篇的結論,為此,才又做了相同的測試,只不過這次用的是Oracle.
Oracle的Session部份,我是用select * from v$session的方式去查看,瞭解目前有多少Session掛在上面.
同樣寫一個測試程式,開了5條Connection,之後用完就馬上Dispose,其各自耗時如下:
看了一下DB的Session,雖然程式已經Dispose掉了,這時還是有五個Session在.
現在把程式的連線數拉到10條,結果如預料,有5條可以reuse就比較快,有5條要重新Create,就比較慢.
當然再看Session就會有10個,這時再重新使用10條連線,速度就都一樣快了,
結論,Oracle在這方面是跟MS SQL一樣的.
測試環境如下 :
Oracle9i Enterprise Edition Release 9.2.0.7.0 – Production
V2.0.50727\System.Data.OracleClient.dll
參考 :
[C#] [Tips]Dispose是否影響Connection Pooling?