2010-05-19 81 views

回答

4

默認情況下,.NET數據庫連接使用pooling。調用Close()Dispose()只是將連接釋放回池中,實際上並未強制它關閉。最終它會離開游泳池,實際上會被關閉。

了一些研究之後,似乎得到它預見的關閉方式主要有兩種:

  1. 在連接字符串中禁用池 - 嘗試加入OLE DB Services = -2;,這應該給你所有的服務,除了彙集
  2. 儘量利用​​

對於您可能需要使用超時播放後一種方法 - 從鏈接的MSDN文章節選:

請注意,單獨調用方法實際上並不釋放池中存在的活動連接。

池終於佈置之前,必須進行以下操作:

  1. 調用Close連接對象返回到池中。
  2. 允許每個連接對象超時。
  3. 調用ReleaseObjectPool。
  4. 調用垃圾回收。

我在工作中,一些內部軟件需要用一塊舊的,不靈活,片狀,絕對關鍵專有軟件交互的用例此。它需要在儘可能短的時間內打開一個共享的MDB數據庫文件,以儘可能減少其他軟件可能「遇到問題」的窗口(非常糟糕的事情)。

我打算使用連接字符串的方法,因爲它看起來更簡單,以保證關閉,我的軟件並沒有真正從池中受益。

0

不知道爲什麼你的代碼不關閉句柄調用Dispose()之後,因爲這調用Close()在幕後,但下面的情況幫你寫常見的方式代碼:

using (OleDbConnection conn = new OleDbConnection(connString)) 
{ 
    //your stuff here 
    conn.Close(); //not necessary, but doesn't hurt 
} 

無論是否拋出異常,這都會關閉你的句柄。使用塊將關閉/處理塊末尾的資源。

+0

真的很奇怪。我實際上正在打電話給處理和關閉。 – Jonn 2010-05-19 07:49:02

相關問題