ADO.NET连接池
启用ADO.NET连接池的效果
默认情况下ADO.NET连接池是被启用的。
string constr = "Data Source=.;Initial Catalog=MyDatabaseOne;Integrated Security=True"; |
禁用ADO.NET连接池的效果
在连接字符串中添加:Pooling=false。
string constr = "Data Source=.;Initial Catalog=MyDatabaseOne;Integrated Security=True;Pooling=False"; |
通过观察发现:
- 当启用ADO.NET连接池后,其实只会创建一个连接对象,并且该连接对象默认不会立刻关闭,后面的所有其他连接对象都是使用这个连接对象。
- 禁用连接池后,每次创建一个连接对象,然后关闭连接。此时会真正地创建多个连接对象,并每次登陆、登出。
ADO.NET连接池使用注意事项
- 当第一次连接数据库的时候,因为连接池中没有任何现成的可用连接对象,所以第一次要创建一个对象。
- con.Close(),当调用Close()方法的时候,其实并没有关闭连接,而是把连接对象放入到了连接池中。
- 当下次再需要连接数据库的时候,首先会检查本次连接所使用的连接字符串是否与连接池中现有的连接对象所使用的连接字符串一模一样,如果一样,则可以直接从连接池中取出该连接对象,直接使用。如果池中没有现成的连接对象,或者池中的连接对象所使用的连接字符串与本次连接要使用的连接字符串不一致,那么此时都会再创建一个新的连接对象。
凡是需要用到“池”的地方,一般都会存在两种情况:
- 创建对象比较费时。
- 对象使用比较频繁。
池的作用:提高了创建对象的效率。
ADO.NET连接池使用总结
- 第一次打开连接会创建一个连接对象。
- 当这个连接关闭时(调用Close()方法时)会将当前那个连接对象放入池中。
- 下一个连接对象,如果连接字符串与池中现有连接对象的连接字符串完全一致,则会使用池中的现有连接,而不会重新创建一个。
- 只有对象调用Close()的时候才会放入池中,如果一个连接对象一直在使用,则下次再创建一个连接对象发现池中没有,也会再创建一个新连接对象。
- 在池中的连接对象,如果过一段时间没有被访问则自动销毁。
封装SqlHelper
新增一个类,改名为SqlHelper.cs。
public static class SqlHelper |
连接字符串写在配置文件中。
<?xml version="1.0" encoding="utf-8" ?> |