欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ADO.NET之连接池技术的使用详解

程序员文章站 2024-03-31 16:09:16
连接到数据库服务器通常需要一定的时间,且服务器也需要一定的资源来处理连接。web应用程序有时处理成千上万的连接,需要相当多的资源来处理连接。ado.net具有连接池的特性,...

连接到数据库服务器通常需要一定的时间,且服务器也需要一定的资源来处理连接。web应用程序有时处理成千上万的连接,需要相当多的资源来处理连接。ado.net具有连接池的特性,连接池的功能是保留一定数量的连接,当用户使用相同的连接字符串再次连接服务器时,aso.net将使用连接池中的连接而不用重新发起一次连接过程。当调用close方法关闭连接时,ado.net将使用连接池中的连接而不用重新发起一次连接过程。当调用close方法关闭连接时,连接将会返回到连接池中,下次再次调用open方法时,将从连接池中取出一个连接使用。

数据库连接字符串默认为启用连接池。使用连接池可以在连接字符串中用pooling=true/false来控制,设置连接池最大值和最小值可以使用max pool size=200;min pool size=1; 进行控制。

下边新建一个控制台应用程序来演示连接池的使用,其实我们仅仅是在connection string中使用pooling=false/true来控制,默认是使用连接池技术的,也就是pooling=true:

复制代码 代码如下:

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.data.sqlclient;
using system.threading;

namespace consoleapplication1
{
    class program
    {
        private static readonly string connectionstring1 = @"data source=.;initial catalog=northwind;integrated security=true;pooling=true;";//默认值即为true,所以可省略pooling=true
        private static readonly string connectionstring2 = @"data source=.;initial catalog=northwind;integrated security=true;pooling=false;";
        static void main(string[] args)
        {
            long startticks1 = datetime.now.ticks;
            using (sqlconnection conn1 = new sqlconnection(connectionstring1))
            {
                for (int i = 0; i < 100; i++)
                {
                    conn1.open();
                    conn1.close();
                }
            }
            long endticks1 = datetime.now.ticks;
            long usedticks1 = endticks1 - startticks1;
            console.writeline("used time: " + usedticks1);

            long startticks2 = datetime.now.ticks;
            using (sqlconnection conn2 = new sqlconnection(connectionstring2))
            {
                for (int i = 0; i < 100; i++)
                {
                    conn2.open();
                    conn2.close();
                }
            }
            long endticks2 = datetime.now.ticks;
            long usedticks2 = endticks2 - startticks2;
            console.writeline("used time: " + usedticks2);

        }

 

    }

}


输出结果:
复制代码 代码如下:

pooling=true: 710040
pooling=false: 3100177