2012-02-28 52 views
0

我有一個客戶端應用程序,通過using子句連接到數據庫。連接池清除時間...我真的不知道該怎麼稱呼它:)

using (SqlConnection sqlConn = new SqlConnection(ConnectionString)) 
    { 
     sqlConn.Open(); 
     //SQLcommand codes 
    } 

我知道這將確保sqlConnn.Close()和sqlConn.Dispose()被調用。然而,運行該代碼之後的每個客戶端我仍然看到一些SPID上的SQLServer在睡眠模式,例如:

60 0睡眠SA AVENGER 0 Xmark命令等待0 61 0睡眠SA AVENGER 0 Xmark命令等待0 62 0睡覺SA AVENGER 0 Xmark AWAITING命令0

我知道這是因爲我在我的連接中使用連接池,這就是爲什麼它們處於睡眠模式並在再次命令中重新使用。如果我沒有對它們做任何事情,我會發現隨着時間的推移(如10分鐘左右之後),這些過程會被刷新。

我的問題是:是否有從C#或SQLServer2008的設置,將這次減少到2分鐘左右?

我面對的問題是,如果我有很多客戶端在短時間內連接到數據庫,我的最大池連接限制會很快達到。我意識到我可以通過增加連接池來解決這個問題,但我認爲這就像是從一個較小的一個升級到一個更大的一個碗,以防止泄漏的屋頂中的水。

我在MSDN上搜索並遇到了ClearPool(),這將讓我隱式地從池中刪除SPID,但我認爲這打破了連接池的目的,它不是很乾淨。

任何幫助,非常感謝。

回答

0

您正在尋找'空閒超時'設置。它是爲IIS中的應用程序池配置的。請參閱本link

1

正如你所知道 SQL服務器甚至可能不關閉連接,當你調用sqlconn.Close(),並將使用的任何其他客戶使用相同的連接字符串連接相同的連接。

理想情況下,您應該使用一個數據訪問層類,它必須充當輔助類來創建和管理連接,而不是減少這個時間。

使用這種方法將避免彙集問題,我已經看到這種方法在良好的應用架構中使用。

你應該修改你的代碼到這個方法。

+0

+1:如果數據訪問層中的類也實現了'IDisposable',所以它也可以封裝在'using'塊中,這種解決方案的效果更好。 – 2012-02-28 17:46:43

相關問題