【发布时间】:2011-05-25 06:36:34
【问题描述】:
我在简单的静态类中使用静态方法实现了我的业务逻辑。这些方法中的每一个都在调用时打开/关闭 SQL 连接:
public static void DoSomething()
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
但我认为传递连接对象并避免打开和关闭连接节省性能。我很久以前用 OleDbConnection 类进行了一些测试(不确定 SqlConnection),它肯定有助于像这样工作(据我所知):
//pass around the connection object into the method
public static void DoSomething(SqlConnection connection)
{
bool openConn = (connection.State == ConnectionState.Open);
if (!openConn)
{
connection.Open();
}
// ....
if (openConn)
{
connection.Close();
}
}
所以问题是 - 我应该选择方法 (a) 还是方法 (b) ?我在另一个 stackoverflow 问题中读到,连接池为我节省了性能,我根本不必费心......
PS。它是一个 ASP.NET 应用程序 - 连接仅在 Web 请求期间存在。不是获胜应用或服务。
【问题讨论】:
-
只是一个建议:使用
DbConnection.StateChange事件来监控连接的状态变化(并且可能存储在本地)而不是直接检查DbConnection.State属性。它将为您节省性能成本。 -
缺少的一个细节是此方法如何成为页面请求的一部分。它是唯一调用的方法,还是正如我在回复中所假设的那样,它是在页面请求中调用的众多方法之一,它会影响哪个答案是正确的;)
-
David - 很多这样的方法被调用:)
-
案例 A 表明对 Dispose 缺乏信心:参见 stackoverflow.com/questions/1195829/… 和 MSDN 上的示例 msdn.microsoft.com/en-us/library/…
标签: c# sqlconnection