有关打开/关闭多个数据库连接的最佳实践

时间:2013-02-28 14:58:53

标签: c# database performance web-applications

我在网络应用程序中有方法,并且代码量很大。在方法的几乎相反的两端,我有数据库交互。

最佳做法 多次打开/关闭其连接在首次需要时打开其连接/在上次需要时关闭它

多次

connection.Open();
//execute db interaction
connection.Close();

//execute business logic

connection.Open();
//execute db interaction
connection.Close();

//execute business logic

connection.Open();
//execute db interaction
connection.Close();

//etc...

先打开/关闭最后

connection.Open();
//execute db interaction

//execute business logic

//etc...

//execute db interaction
connection.Close();

3 个答案:

答案 0 :(得分:7)

理想的解决方法是在初始连接中获取所有数据。但是,如果您有一个代码非常耗时的大型方法,那么在整个方法调用期间保持连接打开的代价很高。

因此,打开和关闭两次(对于数据库)更有效。数据库背后的想法是你想要打开它们并尽快关闭它们,这样你就不会吃掉其他用户使用的资源。

当我年轻的时候,我学到了很多困难并且崩溃了一堆服务器。非常确定你仍然使用池化连接(不确定是否必须手动设置它)

答案 1 :(得分:3)

每个方法使用一个连接:

public void MyMethod(){
  using(SqlConnection conn = new SqlConnection()){

    ..all of your code

  }
}

更有知识的人可以提供更好的答案。

答案 2 :(得分:0)

http://ericlippert.com/2012/12/17/performance-rant/

  

如果你有两匹马,你想知道两匹马中的哪一匹   比你的马更快。不要写简短的描述   马,将它们发布在互联网上,并要求随机的陌生人猜测   哪个更快!即使你纯粹有机会得到准确答案,   你对它的准确性有什么信心?你可以轻松地和   通过运行两者来准确地发现两个程序中哪一个更快   你自己用秒表测量它们。

一旦完成连接就会一直关闭连接,因此它们的基础数据库连接可以返回到池中并可供其他调用者使用。连接池已经过很好的优化,因此没有明显的惩罚。建议与交易基本相同 - 保持简短并在完成后关闭。