我正在將Foxpro遷移到ASP.NET MVC應用程序。的邏輯的連接太多Asp.net
近70%被嵌入在SqlServer的存儲過程。出於這個原因,我們正在使用一些過程來更新某些表(我們不映射SP,只需使用SqlConnection和SqlDataReader,SqlCommand,SqlAddapter調用它們)。
問題是,每次通話都會打開很多連接。即使這樣,每次通話都會關閉連接。當運行sp_who時,許多連接似乎爲同一用戶打開。
執行關閉和處理每個連接的當前方式是什麼?
可以找到一個活動的連接並重用它?
最後的嘗試是:
SqlConnection.ClearAllpools();
不過,這並不立即生效。 我們有一個執行連接的IDisposabel類連接。 這是de close方法:
public void close()
{
SqlConnection.ClearAllPools();
//.ClearPool(BdTransCx);
// SqlConnection.ClearPool(BdArchCx);
if (ConectarArchivos)
{
if (BdArchCx.State == ConnectionState.Open)
{
BdArchCx.Close();
}
}
if (BdArchCx.State == ConnectionState.Open)
{
BdTransCx.Close();
}
}
在每次請求後調用此方法。
關閉一旦你完成它的連接。看看[using-statement](http://msdn.microsoft.com/en-us/library/yh598w02.aspx)。連接池假定當你沒有關閉連接時不能重用連接。請記住,關閉只是池的標誌,實際上與數據庫的連接保持打開狀態,以便儘快重用。如果池中的每個連接都處於使用狀態(打開),池會創建一個新的物理連接,這非常昂貴。它是否達到MaxPoolSize(默認值爲100),你會得到你的例外。 – 2012-03-22 15:50:46
很tks。你正在談論的關閉方法是SqlConnection.close()?或者必須是:using-statement? – 2012-03-22 15:58:22
假設'BdArchCx'是'SqlConnection':'BdArchCx。關閉()'在最後一個try/catch的塊類似於'使用(VAR BdArchCx =新的SqlConnection(conString)){}''因爲將using'調用'dispose'這隱含關閉連接。儘快處置實現「IDisposable」的每個對象是一種很好的做法。 – 2012-03-22 16:01:43