我在网络应用程序中有方法,并且代码量很大。在方法的几乎相反的两端,我有数据库交互。
最佳做法 多次打开/关闭其连接或在首次需要时打开其连接/在上次需要时关闭它?
多次
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();
答案 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/
如果你有两匹马,你想知道两匹马中的哪一匹 比你的马更快。不要写简短的描述 马,将它们发布在互联网上,并要求随机的陌生人猜测 哪个更快!即使你纯粹有机会得到准确答案, 你对它的准确性有什么信心?你可以轻松地和 通过运行两者来准确地发现两个程序中哪一个更快 你自己用秒表测量它们。
一旦完成连接就会一直关闭连接,因此它们的基础数据库连接可以返回到池中并可供其他调用者使用。连接池已经过很好的优化,因此没有明显的惩罚。建议与交易基本相同 - 保持简短并在完成后关闭。