問題背景
-
mysql自己的連接配接池
mysql有連接配接字元串我們是知道的,大緻如
server=localhost;User Id=user;password=123456;Database=test;Charset=utf8;
這樣。
而這個字元串中還有多種配置,比如配置是否使用線程池等。
如果顯式地指定使用線程池的話,那麼就是
反之就是 server=localhost;User Id=user;password=123456;Database=test;Charset=utf8;Pooling=true;
Pooling=false;
。
這都是很容易了解的。
-
C#自己實作的連接配接池
如果我們自己實作一個連接配接池,性能會怎樣呢?
ps:我之前的一篇C#版mysql連接配接池的案例 pps: C#自己實作的連接配接池,裡面有一個
ReturnConnection
函數,可以在每次執行完sql之後就調用,用于“歸還”此連接配接。這個是否有必要每次都調用,也進行了對比。
即總共五種情況對比了。
那麼,上述幾種情況的性能,相比之下究竟怎麼樣呢?
本篇文章就是為了驗證這個問題。
方案:
- 随便建立一個資料庫,放點資料進去以便查詢,進而對比效率。
為了盡可能減少網絡傳輸和不同連接配接之間互相影響的因素,這裡使用了localhost資料庫。并在資料庫中建立了5個不同的使用者,這樣的話就會有五個不同的資料庫連接配接,應該是可以排除連接配接之間互相影響的因素。
- 一個C#項目,使用五種方式分别執行同樣的sql語句,同樣多次數。最後對比時間消耗。
- 四種方式:defaultStr,poolingTrue,poolingFalse,csPool,csPoolReturn體自己了解一下就明白了。
- 特别要注意的是項目裡還額外使用到了AutoFac這個IoC的庫,這個不影響實驗結果,隻是我自己學習此架構的一點應用而已。而且代碼中還要若幹相關連結,有意者可學習。
-
最終對比時間,得出結論。
代碼我都會上傳并放上連結。
以下是執行了幾次,耗時的截圖。

下圖是一部分的關鍵代碼:
結論:C#自己實作的線程池性能居然是最高的,每一次都是這樣。
但是每次sql執行完畢之後,是否需要調用
ReturnConnection
也不見得性能一定最高,且高也沒高出多少,是以看來是不必啟用。