各位:
我是新人!
我一直都是听别人说,操作数据库的时候,如果一旦让connection连接上了数据库,就不要让它轻易断开,否则很浪费资源;所以很多DBHelper才使用了蛮多的static方法,我想问问各位是这样子的吗?
恰恰相反,在使用连接池的情况(ADO.NET的默认情况)下,连接要尽可能早地断开,一完成数据库操作就要立即断开。
那我看了很多网上的DBHelper都大部分写的是static,不用new,很多也不关闭,不dispose,这些设计规范吗?不知道您是否有推荐的文章,让我学习下
@John.Xiong: 这与DBHelper是否是static没有关系,关闭连接在方法中进行的,比如:DBHelper.ExecuteReader()。
一般都是用完就关闭啦,这应该是最好的方案。
再说你也不一定保证它保持连接状态,因为数据库也是有连接过期限制的。
我觉得这个不好说,我觉得socket的连接是蛮要资源的。如果是同一个客户端,执行一次查询就关闭的话,也是很浪费资源的。应该有一个timeout的变量来调节,多久没操作就关连接。
连接池会保持住池中数据库连接的TCP连接
@dudu: 连接池只是维持线程不释放吧,做好线程资源重复利用。如果你连接断了的话,肯定是要新建socket的
@angelshelter: 你在ADO.NET中关闭数据库连接,只是把该连接还给连接池,该连接继续保持着数据库连接,其他线程可以继续使用这个连接。
@dudu:您只说对了前半部分,后半部分说错了,using 执行完以后,连接状态已经处于关闭状态,而且所占用的资源也已经释放了
谢谢您的回复
@蓝色天空__任我行: 只是释放给了连接池,这是经过实践检验过的
@dudu: 可是我我打过断点看过了,using 结束后,Connetion.State 状态的确为Close
连接还是需要尽快关闭吧,占用连接数对并发不利。对于static方法,不代表就没关闭连接,很多DBHelper采用using(var conn=new SqlConnection(ConString))这样的的写法,这个能自动释放连接了。所以有时看不到手动释放的代码。
谢谢您的回复