zoukankan      html  css  js  c++  java
  • C# ADO.net 数据库连接池

      前一阵开发一套系统,同组的同事提供了一个数据库连接组件,是他自己封装的,使用了自定义的连接池,用着很是不爽,而且经常会因为程序不严谨的原因,导致连接池里的连接被用完,也导致其他错误,因此我想自己研究一下ado.net 的连接池。

      其实很早以前,我就接触过连接池,只是从来没有实际使用过,在我的印象里,一个连接池应该是跟SqlConnection,MySqlConnection等差不多,都是实现了IDBConnection 接口,这样程序在使用的时候,是没有任何代码入侵,只是在new 一个connection 的时候,从连接池中获取,同事的这个连接池实在不符合我的审美。

      但是当我从网上开始搜资料时,却发现,其实 Ado.net底层已经支持连接池,根本不需要我们自己开发!!!

      在Ado.net 中,连接池的行为可以通过连接字符串来控制,主要包括四个重要的属性:

    • Connection Timeout:连接请求等待超时时间。默认为15秒,单位为秒。
    • Max Pool Size: 连接池中最大连接数。默认为100。
    • Min Pool Size: 连接池中最小连接数。默认为0。
    • Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。

    我发现了下面这篇文章:

    http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html

    另外,因为我们用了Mysql 数据库,类库不是微软提供的,所以我担心mysql 没有实现连接池,所以自己测试了一下,结果很明显,mysql 也同样支持。

    附测试代码和结果:

     class Program
        {
            static void Main(string[] args)
            {
                MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
               
    
                DateTime startTime = DateTime.Now;
                Console.WriteLine(startTime.ToLongTimeString());
    
                for (int i = 0; i < 100; i++)
                {
                    conn.Open();
                    conn.Close();
                }
    
              
    
                DateTime endTime = DateTime.Now;
                Console.WriteLine(endTime.ToLongTimeString());
                Console.WriteLine("连接100次,使用时间(ms):"+(endTime-startTime).ToString());
    
                Console.ReadLine();
            }
        }

    配置文件:

    启用连接池:(默认的)

    <add name="mysql" connectionString="server = 192.168.2.101; user id = root; password = password; database = Test; Pooling=true;"/>

    不启用连接池:

    <add name="mysql" connectionString="server = 192.168.2.101; user id = root; password = password; database = Test; Pooling=false;"/>

    每种配置我都运行了三遍:

    使用连接池的时候,执行100次时间为0.477秒

    不使用连接池的时候,时间是6.56 秒,相差极大。

    总之,在Ado.net 里,不需要自己实现连接池,只要设置好参数就可以了。

  • 相关阅读:
    Ubuntu 14.04 LTS 安装 NVIDIA 显卡驱动后的屏幕亮度调节问题
    算法算法算法
    Java transient关键字
    使用git和github管理自己的项目---基础操作学习[转]
    Linux 查看系统硬件信息[转]
    实现Servlet容器一
    nginx入门三
    nginx入门二
    nginx入门一
    centos7入门
  • 原文地址:https://www.cnblogs.com/NewBigLiang/p/5407768.html
Copyright © 2011-2022 走看看