连接池

时间:2010-04-26 18:04:25

标签: c# .net ado.net connection-pooling

我有以下代码,如果我最后使用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;
        }
    }

4 个答案:

答案 0 :(得分:6)

首先,考虑使用using,其次,让框架处理。 managed providers将基于连接字符串进行池化。

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

答案 1 :(得分:4)

  • 您不需要在.NET中将任何内容设置为null或任何内容。这由Garbage Collection自动处理。

  • 您必须在错误处理中调用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();
    }
}

正如您所看到的,当您想要/需要的唯一错误处理是确保正确处理您的连接对象时,使用语法可以使事情变得整洁。

答案 2 :(得分:0)

将其设置为null是多余的,因为它会在函数结束时超出范围。是的,如果你这样做,你仍在使用连接池。

答案 3 :(得分:0)

您可以处置您的对象并仍然使用池。

还有它的

  1. 托管应用程序
  2. 是一个网络应用程序
  3. 交通繁忙
  4. 然后处理这个对象会对你有帮助,因为垃圾收集器通常无法保持足够的性能来保存你的性能。