3

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

最佳做法是多次打开/关闭其连接还是在第一次需要时打开其连接/在最后一次需要时关闭它

多次

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();
4

3 回答 3

7

解决此问题的理想方法是在初始连接中获取所有数据。但是,如果您有一个包含非常耗时的代码的大型方法,那么在方法调用的整个过程中保持连接打开是很昂贵的。

因此,打开和关闭两次(对于数据库)效率更高。数据库背后的想法是您希望尽快打开和关闭它们,这样您就不会消耗其他用户也使用的资源。

当我年轻的时候,我很难学会这一点,并且崩溃了一堆服务器。可以肯定的是,无论如何您都使用池连接(不确定是否必须手动设置)

于 2013-02-28T15:01:13.713 回答
3

我每种方法使用一个连接:

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

    ..all of your code

  }
}

知识渊博的人可能会提供更好的答案。

于 2013-02-28T15:02:14.187 回答
0

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

如果您有两匹马,并且您想知道这两匹马中哪一个跑得更快,那么就让您的马匹比赛。不要对马匹进行简短的描述,将它们发布到互联网上,让随机的陌生人猜猜哪个更快!即使你得到了一个准确的答案,你又怎么能相信它的准确性呢?通过自己运行并用秒表测量它们,您可以轻松准确地发现两个程序中的哪个更快。

完成连接后始终关闭连接,因此它们底层的数据库连接可以返回池中并可供其他调用者使用。连接池的优化非常好,因此这样做不会有明显的损失。该建议与交易基本相同 - 完成后保持简短并关闭。

于 2013-02-28T15:00:45.703 回答