2013-05-17 11 views
0

我知道有這樣的堆棧溢出類似的問題,但它不太適合我已經嘗試過。我相信這個問題的原因是不同的,儘管最終結果是一樣的。共享主機上的連接池問題與適當的處置

每當我的網站運行了大約兩三天,我得到以下錯誤(這顯然是由連接/查詢掛起或未正確處理引起的)。

超時已過期。在從池中獲取連接之前已超時。發生這種情況的原因可能是因爲所有連接池都在使用中,並且達到最大池大小。

起初,我做了一些調查,發現使用using,使用finalize調用等解決方案是不夠的。錯誤仍然會最終發生。

因此,我決定弄清楚在Visual Studio中是否存在服務器資源管理器(我經常使用它)泄漏連接。我已經將最大執行和連接超時更改爲3秒,並將池大小減少爲10個連接,因此服務器資源管理器可能是原因。沒有運氣!

那麼我現在要做什麼?

回答

-1

下面是我解決問題的代碼。連接時,捕捉異常並清除所有池,然後重試。

_connection = 
    new SqlConnection(connectionString); 
try 
{ 
    _connection.Open(); 
} 
catch (InvalidOperationException) 
{ 
    SqlConnection.ClearAllPools(); 
    _connection.Open(); 
} 

此外,處置連接時,請確保清除池。

if (_connection != null) 
{ 
    SqlConnection.ClearAllPools(); 
    _connection.Close(); 
    _connection.Dispose(); 
} 
+0

這不是一個解決方案。充其量,你是在治療症狀,而不是問題。 – usr

+0

這是一個解決方案,因爲問題是同時登錄的用戶太多。 –

+0

在這種情況下,真正的解決方案是a)增加池大小和b)發現泄漏並修復它們。可能c)保持連接打開時間更短。 – usr