2012-07-12 170 views
7

以下哪兩種方法具有更好的性能?配置連接或關閉連接

using(var DB_Connection_s = new DBConnection()) 
{ 
//todo: interact with database connection 
} 

或者只是:

DB_Connection_s.Close(); 

末。

第一種方法是否使池化概念無用?因爲如果我在每次使用時都處理連接,那麼每次都必須打開一個新連接(並且池中不會有任何連接)。

+0

Dispose將關閉以及清除其他任何資源。 – Oded 2012-07-12 09:02:59

+1

我知道,我問是否這種表現明智地殺死連接,然後什麼是pooing的好處?! – 2012-07-12 09:03:48

+0

因爲我知道什麼時候我只是關閉連接。它仍然在池中,並使用,如果它不活躍。 – 2012-07-12 09:05:21

回答

5

連接被釋放回當你調用Close或Dispose連接在泳池...

源= SQL Server Connection Pooling (ADO.NET)

所以,刪除有關造成錯過彙集性能損失任何擔心連接。
從代碼的角度來看,差別應該是這樣最小的using聲明應始終使用

+0

嗯,這是否意味着如果我處置連接,它將保持在池中。那麼什麼是關閉() &Dispose()。如果它們都將連接返回到池。 – 2012-07-12 09:36:09

+0

[MSDN]上的這篇文章(http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/f7d1fc91-2829-4835-9021-63b7353dd481)討論了這兩種方法之間的區別。從'BinaryCoder'讀取答案 – Steve 2012-07-12 09:48:34

1

使用Dispose。在Dispose內部,它將關閉連接,所以您不必擔心,如果有疑問,可以使用Reflector或類似的方法輕鬆檢查。

至於表現,我仍然會去使用。 Windows啓用了各種緩存(當然在ODBC中)以確保重複請求可以發生到同一連接,因此您不必擔心性能。

+0

我知道,我問是否這種表現是明智的,每次都會消除連接,然後pooing有什麼好處?! – 2012-07-12 09:03:20

+0

對不起 - 我的不好,更新我的回答 – Ian 2012-07-12 09:09:32

7

using模式更好,因爲無論如何Dispose調用會關閉連接,但作爲獎勵,即使使用內部出現錯誤,連接也會關閉。例如一個異常或只是一個強制程序執行超出使用範圍的返回。通過使用,您不需要顯式關閉連接,這使代碼更具可讀性。 作爲另一種模式,連接必須儘快關閉。在頻繁關閉/打開連接時沒有性能缺陷,因爲連接池將優化爲您重新使用的連接。

+0

嗯,這是否意味着如果我處置連接,它將保持在池中。 – 2012-07-12 09:28:09

+1

@just_name,是關閉和處置都沒有區別:關閉的連接只是關係到池 – 2012-07-12 10:01:10

+0

和處置的連接也釋放到池.am我是嗎? – 2012-07-12 10:02:45

1

除非你要叫。開()再次不久的某個時候,

使用using(){}塊。

,如果你馬上就要別的地方使用相同的連接,
呼叫.close();然後.open()等等...
使你的類實現IDisposable有連接的處置!

創建Connection對象仍需要時間