[英]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是多余的,因為它會在函數結束時超出范圍。 是的,如果您這樣做,您仍在使用連接池。
您可以處置對象並仍然使用池。
還有它的
然后處理對象會對你有好處,因為垃圾收集器通常無法保持足夠的性能來保存你的性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.