0

在使用Enterprise Library時,在掃描堆時,必須手動關閉數據庫連接(如GC),查找超出範圍的項目時出現問題。SubSonic - 需要手動強制連接關閉?

連接是正在使用的連接池的一部分,但連接狀態已損壞或正在提取,但您已收到結果,將保持打開狀態,並且池中的連接句柄將耗盡。

因此,添加手動連接檢查和強制關閉連接是很好的形式。

現在,採取亞音速。隨着EntLib基地,我做在finally塊如下:

 public static bool GetISOCountryCodes(out DataSet dsISOCountryCodes, out Response dbResponse) 
    { 
     dbResponse = new Response(); 
     dsISOCountryCodes = new DataSet(); 
     StoredProcedure sp = null; 
     try 
     { 
      sp = SPs.GetISOCountryCodes(null); 
      dsISOCountryCodes = sp.GetDataSet(); 

      // set the response object properties 
      dbResponse = new Response((int)sp.OutputValues[0]); 

      return dbResponse.IsValid; 
     } 
     catch (System.Exception ex) 
     { 
      return dbResponse.IsValid;    
     } 
     finally 
     { 
       if (sp.Command != null && sp.Command.ToDbCommand().Connection != null && 
       sp.Command.ToDbCommand().Connection.State == ConnectionState.Open) 
       sp.Command.ToDbCommand().Connection.Close(); 
     } 
    } 

我知道這是有人說,您不必手動做到這一點,因爲亞音速會爲你做這個,但是,我d想知道是否有人遇到了SubSonic未關閉連接的問題(再次,因爲它在根上使用EntLib),以及是否有更好的方法來完成此操作。

顯然,在我所有的數據調用方法中,我會引用一個,比如說「ConnectionCloser()」方法。

謝謝。

+0

我從來沒有聽說過有任何此類連接管理問題。你是否有重複案例,或者是參考資料,或者是否有備份這個聲明的東西?連接管理是數據塊的主要工作,現在我預計會聽說這個問題。 – 2010-11-17 20:49:46

+0

有一個可重複的案例,我一直使用Entlib 4.0和4.1。游泳池只會耗盡連接。由於Subsonic使用Entlib,我會認爲它會受到上述影響。因此,自從我遇到entlib問題以來,我一直在進行明確的關閉,並且從此以後從未遇到過連接問題。請注意,這是一個擁有400GB數據庫的高級事務處理系統。 – chiefbrownbotom 2010-11-20 00:22:27

+0

你是否在entlib.codeplex.com的Entlib項目網站上報告過這個錯誤?如果你有,我錯過了,我道歉。 – 2010-12-01 06:47:27

回答

0

這篇文章是更多的討論通知。但是,我不確定該問題是否已在v5中得到解決。所以基本上答案是繼續檢查finally塊。