天天看點

C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證

問題背景

  1. 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;​

    ​。

    這都是很容易了解的。

  2. C#自己實作的連接配接池

    如果我們自己實作一個連接配接池,性能會怎樣呢?

ps:我之前的一篇C#版mysql連接配接池的案例​ pps: C#自己實作的連接配接池,裡面有一個​

​ReturnConnection​

​函數,可以在每次執行完sql之後就調用,用于“歸還”此連接配接。這個是否有必要每次都調用,也進行了對比。

即總共五種情況對比了。

那麼,上述幾種情況的性能,相比之下究竟怎麼樣呢?

本篇文章就是為了驗證這個問題。

方案:

  1. 随便建立一個資料庫,放點資料進去以便查詢,進而對比效率。
為了盡可能減少網絡傳輸和不同連接配接之間互相影響的因素,這裡使用了localhost資料庫。并在資料庫中建立了5個不同的使用者,這樣的話就會有五個不同的資料庫連接配接,應該是可以排除連接配接之間互相影響的因素。
  1. 一個C#項目,使用五種方式分别執行同樣的sql語句,同樣多次數。最後對比時間消耗。
  1. 四種方式:defaultStr,poolingTrue,poolingFalse,csPool,csPoolReturn體自己了解一下就明白了。
  2. 特别要注意的是項目裡還額外使用到了AutoFac這個IoC的庫,這個不影響實驗結果,隻是我自己學習此架構的一點應用而已。而且代碼中還要若幹相關連結,有意者可學習。
  1. 最終對比時間,得出結論。

    代碼我都會上傳并放上連結。

    以下是執行了幾次,耗時的截圖。

  2. C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證
    C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證
C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證
C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證
C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證

下圖是一部分的關鍵代碼:

C#版本Mysql連接配接池與mysql自帶連接配接池的性能對比驗證

結論:C#自己實作的線程池性能居然是最高的,每一次都是這樣。

但是每次sql執行完畢之後,是否需要調用​

​ReturnConnection​

​也不見得性能一定最高,且高也沒高出多少,是以看來是不必啟用。

繼續閱讀