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
上一篇: java实现简单美女拼图游戏
下一篇: Python队列的定义与使用方法示例