zoukankan      html  css  js  c++  java
  • 个人对ADO连接池的理解

      说起连接池,我先举个例子吧,

      String constr = "Data Source=.;Initial Catalog=Text;User Id=sa;Password=AAA123456";
                Stopwatch watch = new Stopwatch();
                watch.Start();
                for (int i = 0; i < 3000; i++)
                {
                    using (SqlConnection con = new SqlConnection(constr))
                    {
                        con.Open();
                        con.Close();
                    }
                }
                watch.Stop();
                Console.WriteLine(watch.Elapsed);      //用时:00:00:00.0996231

    我们听过秒表计时可以看到,执行3000次的打开关闭数据库连接用时00:00:00.0996231

    现在我禁用连接池:

     String constr = "Data Source=.;Initial Catalog=Text;User Id=sa;Password=AAA123456;Pooling=false";(重复的代码这里就不写了)

    用时:00:00:05.9983207

    可以看到同样执行3000次的打开关闭连接操作,用时相差差不多60倍!

        这个主要就是我们创建了ADO连接,在关闭的时候,连接被放到了一个叫做ADO连接池的东西里面了,在下次打开的时候直接从连接池打开就好(前提是两次连接字符串必须一致,包括空格),而关闭连接池的话,那么数据库的连接与关闭就真的这样一直开关开关的折腾了3000次。   不过连接池是默认启用的

        其实在系统内部,在SqlConnection创建连接以后,真正连接数据库的是_innerConnection属性,所以说当连接Dispose以后,innerConnection属性被放到了连接池里,而con这个对象被销毁。创建的con对象只是对_innerConnection属性的一个封装,当下次再连接的时候如果连接字符串一样,虽然连接对象被销毁了,但是真正连接数据库的_innerConnection属性并没有销毁,所以说就不用再创建连接。我们在Sql数据库里面创建一个跟踪,可以看到启用连接池就打开了一次,连关闭都没有,而关闭连接池打开关闭连接池,跟踪里面login  longout好多行,显然这就占用资源。

      注意:1,连接池是在连接关闭的时候创建的

           2,连接池一般是不禁用的,尤其在ASP.NET程序中,n多用户同时访问,并且大都访问采用的是同一个连接字符串。

         3,如果一个程序有多个客户端,每个客户端采用的都是各自的连接字符串,这时我们就禁用连接池,免得在池里面保存多个打开的连接对象。

  • 相关阅读:
    如何使用VS2013进行单元测试和查看代码覆盖率
    荔枝架构演进历程读后感
    关于海尔电商峰值系统架构读后感
    苏宁易购:商品详情系统架构设计读后感
    第二阶段冲刺第四天
    第二阶段冲刺第五天
    第二阶段冲刺第三天
    第二阶段冲刺第二天
    第二阶段冲刺第一天
    第一阶段末尾
  • 原文地址:https://www.cnblogs.com/tuibian/p/3344111.html
Copyright © 2011-2022 走看看