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. 最终对比时间,得出结论。
    代码我都会上传并放上链接。
    以下是执行了几次,耗时的截图。
    C#版本Mysql连接池与mysql自带连接池的性能对比验证
    C#版本Mysql连接池与mysql自带连接池的性能对比验证

C#版本Mysql连接池与mysql自带连接池的性能对比验证
C#版本Mysql连接池与mysql自带连接池的性能对比验证
C#版本Mysql连接池与mysql自带连接池的性能对比验证

下图是一部分的关键代码:

C#版本Mysql连接池与mysql自带连接池的性能对比验证

结论:C#自己实现的线程池性能居然是最高的,每一次都是这样。

但是每次sql执行完毕之后,是否需要调用ReturnConnection也不见得性能一定最高,且高也没高出多少,因此看来是不必启用。

其余内容待我上传项目代码(包含数据库当前内容)再来添加地址。


源码地址:
C#版本Mysql连接池与mysql自带连接池的性能对比验证