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默认启用了连接池】

你可能感兴趣的:(.net)