使用连接池提高应用程序性能
连接池在哪里?
连接池是一种客户端技术.
客户端意味着连接池位于执行 DbConnection 对象 Open 语句的计算机上.
创建和打开连接池
连接池的使用体现在连接字符串中.
如:
SqlConnectionStringBuilder connbuilder = new SqlConnectionStringBuilder();
connbuilder.DataSource = "localhost";
connbuilder.UserID = "user";
connbuilder.Password = "password";
connbuilder.Pooling = true;
connbuilder.ConnectTimeout = 10;
connbuilder.MinPoolSize = 5;
connbuilder.MaxPoolSize = 20;
SqlConnection conn = new SqlConnection(connbuilder.ConnectionString);
conn.Open();
影响连接池的参数
bool Pooling 如果设置为true,则请求从连接池返回连接,默认为true。
int MinPoolSize 连接池的最小连接数,默认为 0 。在应用程序即使长时间处于未激活状态,仍然要求它
能稳定快速地进行响应,一般将这个值设为一个较小的值,比如 5 。
int MaxPoolSize 连接池的最大连接数,默认为100。
int ConnectTimeout 连接超时,默认为15秒。
何时创建连接池
在实例化第一个连接时会创建一个连接池组对象,它是一个管理连接池的对象。
但只有打开第一个连接时才会创建第一个连接池。
连接在连接池中生存的时间是多少
在需要使用连接时,会从连接池中提取一个可用连接,在使用完毕后,会将连接返回给连接池中的可用连接列表。
在一个连接返回连接池后,它的生存时间为 4 到8 分钟(一个随机的时间)。连接池不会无限期地保存空闲的连接。
使用 using 语句防止连接泄漏造成超出连接池容量
using 块将自动调用 Dispose 方法。
如:
SqlConnectionStringBuilder connbuilder = new SqlConnectionStringBuilder();
connbuilder.DataSource = "localhost";
connbuilder.UserID = "user";
connbuilder.Password = "password";
using(SqlConnection conn = new SqlConnection(connbuilder.ConnectionString))
{
conn.Open();
using(SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "";
cmd.ExecuteNonQuery();
}
}