Ado.Net连接池的速度测试

时间:2022-04-23
本文章向大家介绍Ado.Net连接池的速度测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

 using System;
 using System.Configuration;
 using System.Data.SqlClient;
 using System.Diagnostics;
 namespace ConsoleApplication1
 {
   class Program
   {
       static void Main(string[] args)
       {
           string _connString = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
           SqlConnection conn = new SqlConnection(_connString);
            Stopwatch sw = new Stopwatch();
            sw.Start();
           conn.Open();
           sw.Stop();
           Console.WriteLine("1连接所用时间:{0}" , sw.ElapsedTicks.ToString());
           conn.Close();//关闭连接
            sw.Reset();
           sw.Start();
           conn.Open();//现在是直接从连接池中分配的连接,所以速度要快很多
           sw.Stop();
           Console.WriteLine("2连接所用时间:{0}", sw.ElapsedTicks.ToString());
           conn.Dispose();//释放连接
           conn.ConnectionString = _connString;
            sw.Reset();
           sw.Start();
           conn.Open();//Dispose()后,仍然可以连接!(前提是必须重设连接字符串)
           sw.Stop();
           Console.WriteLine("3连接所用时间:{0}", sw.ElapsedTicks.ToString());//从输出结果上看,这一次仍然要比首次连接快很多,貌似也是从连接池中取的
           conn.Close();

           using (SqlConnection conn2 = new SqlConnection(_connString))
           {
               try
               {
                   sw.Reset();
                   sw.Start();
                   conn2.Open();//即使创建一个完全不同的新Connection对象,只要连接字符串相同,仍然会从连接池内中分配已有连接,所以速度仍然很快
                   sw.Stop();
                   Console.WriteLine("4连接所用时间:{0}", sw.ElapsedTicks.ToString());
               }
               catch (Exception)
               {
                    throw;
               }
               finally {
                   conn2.Close();
               }
           }
          
         
           //连续多次调用Close()或Dispose()不会抛出异常,但连续多次调用Open()会抛出异常
           //conn.Close();
           //conn.Close();
            //conn.Dispose();
           //conn.Dispose();
           Console.Read();
           //即使不关闭连接,程序退出时,连接也被会自动销毁
       }
   }
}

本机执行结果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()后,再次连接的速度,有时快,有时慢(但总体比首次连接要快),不知道是不是我机器的问题.