连接池
我有以下代码,如果我最后使用conn == null,我仍然使用连接池? 我知道关闭连接是一个好习惯但是如何处理整个连接对象呢?
public void ExecuteNonQuery(SqlCommand Cmd) { //========== Connection ==========// SqlConnection Conn = new SqlConnection(strConStr); try { //========== Open Connection ==========// Conn.Open(); //========== Execute Command ==========// Cmd.Connection = Conn; Cmd.CommandTimeout = 180; Cmd.ExecuteNonQuery(); } catch (Exception Exc) { throw Exc; } finally { //======== Closing Connection ========// if (Conn.State == ConnectionState.Open) { Conn.Close(); } //======== Disposing object ========// Conn = null; } }
首先,考虑使用using
,其次,让框架处理。 托管提供程序将根据连接字符串进行池化。
public void ExecuteNonQuery(SqlCommand Cmd) { //========== Connection ==========// using(SqlConnection Conn = new SqlConnection(strConStr)) { //========== Open Connection ==========// Conn.Open(); //========== Execute Command ==========// Cmd.Connection = Conn; Cmd.CommandTimeout = 180; Cmd.ExecuteNonQuery(); } }
-
您不需要在.NET中将任何内容设置为null或任何内容。 这是由垃圾收集自动处理的。
-
必须在error handling中调用Conn.Dispose() ,并且如果一切按计划进行。 Try Catch Finally块非常适用于此。 另一种方法是在声明连接时使用Using关键字,以便Connection对象能够正确处理发生的任何事情。
-
不要担心汇集你的连接。 如果你每次需要使用一个新的,那么这很好。 ADO.NET在幕后为您提供连接。 如果您重复使用相同的打开连接对象,则会有轻微的性能,但为了简单起见,请不要担心它。
您可以使用以下代码执行相同操作。 结果是一样的。 无论是否出错, Conn
都将得到妥善处理。 任何错误都会像以前一样渗透。
public void ExecuteNonQuery(SqlCommand Cmd) { Using (SqlConnection Conn = new SqlConnection(strConStr)); { //========== Open Connection ==========// Conn.Open(); //========== Execute Command ==========// Cmd.Connection = Conn; Cmd.CommandTimeout = 180; Cmd.ExecuteNonQuery(); } }
正如您所看到的,当您想要/需要的唯一error handling是确保正确处理您的连接对象时,使用语法可以使事情变得整洁。
将其设置为null是多余的,因为它会在函数结束时超出范围。 是的,如果您这样做,您仍在使用连接池。
您可以处置对象并仍然使用池。
还有它的
- 托管应用程序
- 是一个Web应用程序
- 交通繁忙
然后处理对象会对你有好处,因为垃圾收集器通常无法保持足够的性能来保存你的性能。