我们有一个.NET对象,做了很多的读/与数据库进行写作。整个对象(或使用它的ASP页)的生命周期,可以将其与查询/更新从1到10次命中数据库的任何地方。

相反开口和每一个对象需要访问数据库时关闭数据库连接的,它只是打开实例化期间到数据库的连接,然后关闭该对象的终止事件期间的连接。那是一个不好的做法?

假设是,由于对象访问数据库每一个它的实例化时间(通常是多次),这将是最好只打开在对象的生命的开始连接,然后在年底关闭。

另一种方法是,以打开和关闭之前和每个查询/操作后的数据库连接。

这里有什么最好的做法,以最大限度地提高性能?

**** ****更新 谢谢提醒伙计。任何人都可以讲更多的打开/关闭方法对象的实例/解约事件而这样做的后果内部的连接?

有帮助吗?

解决方案

根据需要打开一个紧密的连接。 ADO.NET已建成连接池工程。你不会注意到任何性能问题,除非你是在成千上万的开环这样做/关闭。

修改的 请参见我应该在我的数据访问层坚持一个SqlConnection的? ,获取作为连接持久性的缺陷的详细信息。

其他提示

打开和关闭,每次打开...立即(尽可能接近)的代码行,实际的执行数据库操作,并且尽快关闭之后立即之前。执行此操作时以这种方式,ADO.net实际上并不关闭连接,它只是将其释放回ADO.net连接池,在那里坐着等待具有相同conenction串的连接下一个请求。你是不是招致每次重新创建实际的连接ovberhead ...

唯一的问题是,如果你这样做异步,你超出池中的最大连接数这么多的连接尝试....并使用System.Threading.ThreadPool类有办法解决这个问题为好,。 ..

要添加到信任的连接池参数 - 保持连接打开比需要较长实际上的减少的综合性能,作为连接池不能共享连接到其它组件需要一个DB连接。

所以,是开放并根据需要关闭连接。虽然,这将会是即使你能批你的查询到一个单一的exec调用。更快

即使ado.net实际上并不关闭连接,当你做:Conn.Close()它在服务器上执行“sp_reset_connection的”,即使sp_reset_connection的是一个轻量级的存储过程,它产生一些网络流量。 因此,例如,我不建议关闭和打开一个循环内的连接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top