簡體   English   中英

連接池

[英]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;
        }
    }

首先,可以考慮使用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或任何內容。 這是垃圾收集自動處理的。

  • 必須在錯誤處理中調用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();
    }
}

正如您所看到的,當您想要/需要的唯一錯誤處理是確保正確處理您的連接對象時,使用語法可以使事情變得整潔。

將其設置為null是多余的,因為它會在函數結束時超出范圍。 是的,如果您這樣做,您仍在使用連接池。

您可以處置對象並仍然使用池。

還有它的

  1. 托管應用程序
  2. 是一個Web應用程序
  3. 交通繁忙

然后處理對象會對你有好處,因為垃圾收集器通常無法保持足夠的性能來保存你的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM