zoukankan      html  css  js  c++  java
  • Ado.Net连接池的速度测试

    晚上闲来无事,突然想测试一下Ado.Net连接池带来的连接速度提升,写了以下代码:

     1using System;
     2using System.Configuration;
     3using System.Data.SqlClient;
     4using System.Diagnostics;
     5
     6namespace ConsoleApplication1
     7{
     8    class Program
     9    {
    10        static void Main(string[] args)
    11        {
    12            string _connString = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
    13
    14            SqlConnection conn = new SqlConnection(_connString);
    15
    16            Stopwatch sw = new Stopwatch();
    17
    18            sw.Start();
    19            conn.Open();
    20            sw.Stop();
    21            Console.WriteLine("1连接所用时间:{0}" , sw.ElapsedTicks.ToString());
    22
    23            conn.Close();//关闭连接
    24
    25            sw.Reset();
    26            sw.Start();
    27            conn.Open();//现在是直接从连接池中分配的连接,所以速度要快很多
    28            sw.Stop();
    29
    30            Console.WriteLine("2连接所用时间:{0}", sw.ElapsedTicks.ToString());
    31
    32            conn.Dispose();//释放连接
    33
    34            conn.ConnectionString = _connString;
    35
    36            sw.Reset();
    37            sw.Start();
    38            conn.Open();//Dispose()后,仍然可以连接!(前提是必须重设连接字符串)
    39            sw.Stop();
    40            Console.WriteLine("3连接所用时间:{0}", sw.ElapsedTicks.ToString());//从输出结果上看,这一次仍然要比首次连接快很多,貌似也是从连接池中取的
    41
    42            conn.Close();
    43
    44
    45            using (SqlConnection conn2 = new SqlConnection(_connString))
    46            {
    47                try
    48                {
    49                    sw.Reset();
    50                    sw.Start();
    51                    conn2.Open();//即使创建一个完全不同的新Connection对象,只要连接字符串相同,仍然会从连接池内中分配已有连接,所以速度仍然很快
    52                    sw.Stop();
    53                    Console.WriteLine("4连接所用时间:{0}", sw.ElapsedTicks.ToString());
    54                }

    55                catch (Exception)
    56                {
    57
    58                    throw;
    59                }

    60                finally {
    61                    conn2.Close();
    62                }

    63            }

    64           
    65
    66           
    67            //连续多次调用Close()或Dispose()不会抛出异常,但连续多次调用Open()会抛出异常
    68            //conn.Close();
    69            //conn.Close();
    70
    71            //conn.Dispose();
    72            //conn.Dispose();
    73            Console.Read();
    74
    75            //即使不关闭连接,程序退出时,连接也被会自动销毁
    76        }

    77    }

    78}

    本机执行结果1:
    --------------------------------
    1连接所用时间:480219
    2连接所用时间:130
    3连接所用时间:60
    4连接所用时间:47
    --------------------------------


    本机执行结果2:
    --------------------------------
    1连接所用时间:476064
    2连接所用时间:137
    3连接所用时间:1411
    4连接所用时间:49
    --------------------------------


    本机执行结果3:
    --------------------------------
    1连接所用时间:691719
    2连接所用时间:132
    3连接所用时间:69
    4连接所用时间:53
    --------------------------------


    可以明显看出,连接池技术确实让后来的Connection对象Open时速度提升不少,不过有点出乎意料的是"4连接"始终要比"2连接"快不少?既然都是从连接池内中分配的,应该速度差不多才是!另外Dispose()后,再次连接的速度,有时快,有时慢(但总体比首次连接要快),不知道是不是我机器的问题.

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    springboot集成Spring Security安全框架(一)入门程序
    Redis学习(三)Redis 配置
    javax.servlet.ServletException: Could not resolve view with name 'order/list' in servlet with name 'dispatcherServlet'
    com.mysql.cj.exceptions.DataReadException: Zero date value prohibited
    Redis学习(二)Redis的安装
    Redis学习(一)简介
    Registering current configuration as safe fallback point
    IntelliJ IDEA为类和方法自动添加注释
    github 创建新项目
    pypi 的使用
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1503181.html
Copyright © 2011-2022 走看看