今天我来比较以下使用数据库连接池和不使用数据库连接池的效率问题。

创建两个数据库连接字符串,一个不打开连接池,一个打开连接池,设置连接池最大数量为10000代码如下:

private static string connStr_nopool = "Data source=.;Initial Catalog=Test;User ID=sa;Password=testtest;Pooling=false";
private static string connStr = "Data source=.;Initial Catalog=Test;User ID=sa;Password=testtest;Pooling=true;Max Pool Size=10000; Min Pool Size=5";

然后测试反复打开连接5000次。

                int connectTimes = 5000;              
                //不用连接池
                DateTime d1 = DateTime.Now;
                for (int i = 1; i <= connectTimes; i++)
                {
                    SqlConnection conn = new SqlConnection(connStr_nopool);
                    conn.Open();
                    conn.Close();
                }
                Console.WriteLine("不用连接池 打开连接耗时" + (DateTime.Now-d1).TotalMilliseconds);

                //用连接池
                DateTime d2 = DateTime.Now;
                for (int i = 1; i <= connectTimes; i++)
                {
                    SqlConnection conn = new SqlConnection(connStr);
                    conn.Open();
                    conn.Close();
                }
                Console.WriteLine("用连接池 打开连接耗时" + (DateTime.Now - d2).TotalMilliseconds);

测试结果如下:

看到这个结果,谁的性能快,你懂的。

原理:如果不使用连接池,那么每次打开连接都要和数据库服务器进行TCP三次握手。使用连接池,连接不会断开,只是保存在连接池中以供下次使用,省去了连接的时间。

使用连接池和不使用连接池的区别:不使用连接池速度慢,但是不占用内存。使用连接池要占用内存,但是速度快。就是空间换时间。

 

转载请注明出处: http://bluesd7.com/蓝影闪电的随笔/ContentId/133/SQL-Server,-Net-数据库连接池性能测试

 

评论数量 (0)

    留下一个评论

    剩余2000个字符。 一共限制在2000个字符内.
    发送评论

    搜索

    关于我

    姓名:余钊

    英文名:Joshua

    现居:武汉

    Email: yuzhao_blue@163.com

    关注:架构, 全栈, SQL, 高性能, 高并发

    日历