簡體   English   中英

跨多個方法使用SQLConnection('使用'關鍵字是或否)

[英]Using SQLConnection across multiple methods ('using' keyword yes or no)

我想在類中重復使用相同的SQLConnection accros不同的方法。 我現在正在做的(僅測試)是在構造函數中創建並打開一個連接:

SQLConnection Connection;

Constructor(string connection_string)
{
    this.Connection = new SqlConnection(connection_string);
    this.Connection.Open();
}

然后我在方法中使用“this.Connection”,最后在不再需要該對象時使用this.Connection.Close()和Dispose()。 據我所知,在每個方法中使用'using'會更加清晰(構造函數只會設置connection_string):

using (SqlConnection connection = new SqlConnection(connection_string)) {
 connection.Open(); ...
}

由於連接池,實際上只使用了一個連接,盡管上面的“使用”行被放置在多個方法中(例如,當它們被一個接一個地調用時),是否正確? 但是,這不會創建許多只需要一個的SQLConnection實例嗎? 例如:

MyClass obj(some_string);
obj.Method1(); // calls 'using SqlConnection connection = new SqlConnection'
obj.Method2(); // calls 'using SqlConnection connection = new SqlConnection'
obj.Method3(); // calls 'using SqlConnection connection = new SqlConnection'

那么分享SQLConnection的最佳方式是什么?

你對所有陳述都是正確的。 但是你遺漏了一個重點: 在.NET中創建大量類型的實例並不一定是件壞事

  • 不應該在構造函數中創建單個連接實例
  • 應該在需要時在本地創建連接
  • 在創建一次性對象時, 最好使用using范例
  • 應該調用Dispose在一次性物品的習慣try...finall塊(如果不使用using ) -如果您的具體情況並不土地本身以及對使用usings ; 例如使用異步方法)
  • 最后,您不應該保持SQL連接打開的時間超過您的需要。 再次,只是利用SQL Server的ADO.NET提供程序中的連接池

現在,創建大量Connection類型實例不是問題的原因是因為.NET CLR中的對象被優化(快速內存分配和對象實例化)並且相對無痛(無需擔心釋放內存,這要歸功於垃圾收集)..在ADO.NET提供商的情況下,你也有連接池的好處,所以你不應該關心管理這種類型的實例數。

顯而易見的是,在其他情況下(例如重型/大型物體),創建大量物體會對內存壓力和性能產生影響。 因此,請盡可能地評估情況。

暫無
暫無

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

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