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()」方法。
謝謝。
我從來沒有聽說過有任何此類連接管理問題。你是否有重複案例,或者是參考資料,或者是否有備份這個聲明的東西?連接管理是數據塊的主要工作,現在我預計會聽說這個問題。 – 2010-11-17 20:49:46
有一個可重複的案例,我一直使用Entlib 4.0和4.1。游泳池只會耗盡連接。由於Subsonic使用Entlib,我會認爲它會受到上述影響。因此,自從我遇到entlib問題以來,我一直在進行明確的關閉,並且從此以後從未遇到過連接問題。請注意,這是一個擁有400GB數據庫的高級事務處理系統。 – chiefbrownbotom 2010-11-20 00:22:27
你是否在entlib.codeplex.com的Entlib項目網站上報告過這個錯誤?如果你有,我錯過了,我道歉。 – 2010-12-01 06:47:27