SqlConnection就一定要关闭吗?
按照ms的说法,数据库连接属于非托管资源,在.net下使用后一定要close,这样才能避免资源泄露。其实我并不这么认为,我觉得只要控制住数据库的连接数量就可以了。那么如何控制连接数量呢?控制连接数量实际上就是控制使用数据库的组件的实例化的数量。这好办,用COM+的对象池就可以了。
具体的实践如下:
1、建立一个从ServicedComponent继承的类
2、声明使用对象池
3、在该类的构造函数中打开对数据库的连接,并声明不使用ado.net提供的连接池。应该在该函数中尽量把所有初始化工作做完,这样可以更好地利用对象池
4、如果该类的方法不会被client频繁调用,那么应该声明JITA
5、写数据库访问相关方法,对数据库操作后,不关闭SqlConnection
6、重写CanBePooled方法,如果SqlConnection是open的状态,那么就声明可以被pooled
7、写client调用方法,对刚才写好的类的数据库访问方法进行调用,调用后一定要dispose该类,以便通知对象池回收
经测试证明,在大访问量的情况下,速度要比关闭数据库连接的ServicedComponent快,但是付出的代价是数据库增加了约连接池同等数量的线程,并且可连接数量减少。
欢迎大家板砖