连接池的概念:连接池是一个进程,该进程保存连接并使其处于活动状态,使连接可以被重复使用。在实际的应用场景中,相同的连接字符串对应一个连接池。如果用这个连接字符串new出多个数据库连接,操作完相关的数据操作后,显示close掉连接,对于数据库而言,该连接并没有被释放,而只不过是被标记为"关闭"状态,当一次再次要用到该连接的时候,它可以从连接池中拿出来使用。然而,如果你有太多的连接都没有close掉的话,那么连接池里打开的连接都未被标记为“关闭”状态,这些链接是不可以重复利用的,当超过一定数额的时候就会出现连接异常。在没有超过max pool size (该值可以在写连接字符串的时候自己设置大小,默认为100)的情况下,如果没有可以重复利用的连接,则,数据库会自行往连接池中增加连接。
下面用一个简单的例子来说明下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace ConnectionPool
{
public partial class Form1 : Form
{
SqlConnection conn = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.textBox1.Text = @"Data Source=HUAMA-QJ;
Initial Catalog=DBApp;Persist Security Info=True;User ID=sa;
Password=******;max pool size=5";
}
private void btnOpen_Click(object sender, EventArgs e)
{
conn = new SqlConnection(this.textBox1.Text);
conn.Open();
}
private void btnClose_Click(object sender, EventArgs e)
{
if (conn != null)
conn.Close();
//SqlConnection.ClearPool(conn);
}
}
}
在Textbox里设置了连接池中能够容纳连接的最大数:5个。
如果您点击“OpenConn”,你点击5次,这个时候在SQLSERVER MANAGEMENT STUDIO中执行sp_who2存储过程可以看到以下结果:
如果你再次点击"openConn"这个时候就出现异常“”。
当然,你也可以配置min pool size,可以将上述的连接字符串中的max改成min,你会发现,你只要点击一次"openConn"就会发现直接打开了5个连接,这个就是最小连接的含义。当你想要清除该连接字符串相关的连接的时候,也就是清除连接池中相关的连接,你可以用SqlConnection.ClearPool(conn);
大家可以自己亲手体验一下这个简单的demo,然后再去体会连接池的作用。
CIO之家 www.ciozj.com 公众号:imciow