首页 > 代码库 > ado.net连接池效果

ado.net连接池效果

//启用连接池            string constr = "Data Sourse=zxtiger; Initial Catalog=itcastcn;Integrated Security=True";            Stopwatch watch = new Stopwatch();            watch.Start();            for (int i = 0; i < 2000; i++)            {                using (SqlConnection con = new SqlConnection(constr))                {                    con.Open();                    con.Close();                }            }            watch.Stop();            Console.WriteLine(watch.Elapsed);            Console.ReadKey();
//启用连接池后,只执行一次连接操作
//禁用连接池            string constr = "Data Sourse=zxtiger; Initial Catalog=itcastcn;Integrated Security=True;Pooling=false";            Stopwatch watch = new Stopwatch();            watch.Start();            for (int i = 0; i < 2000; i++)            {                using (SqlConnection con = new SqlConnection(constr))                {                    con.Open();                    con.Close();                }            }            watch.Stop();            Console.WriteLine(watch.Elapsed);            Console.ReadKey();

 连接池默认是打开的,当连接池被禁用后

//00:00:00.1383385
//00:00:03.9974913

前后相差29被

所谓的连接池,就是一个与连接对象Connection相关的集合,这不只是简单的集合,而是有一定的机制在内部。我们做开发时,可能建立Connection连接对象,关闭连接对象,有时候还调用Dispose来释放连接。下次再用时,便重新实例化一个连接。但在池中的连接不随连接对象的Close或Dispose而释放。如果下次重新建立连接,连接字符串与前一次完全一模一样,则连接池就会把上次可用的连接对象赋给连接去用。如果两个连接字符串有一点不一样,即使在某一个地方多一个空格,连接池也不会以为是相同的连接,这点微软可能在内部只直接去比较两个字符串了,而不是比较连接数据库字符串的键值互相匹配。

连接池的好处就是保留连接对象,防止下次重头再来实例化一个连接对象。

由于每次正常连接数据库至少执行3个操作(1.登陆数据库服务器2.执行操作3.注销用户),所以每次通过Connection向数据库服务器申请一个连接都比较耗时【ado.net默认启用了连接池】

ado.net连接池效果