2009-07-16 132 views
10

我有一個客戶端 - 服務器應用程序,它使用.NET SqlClient數據提供程序連接到sql服務器 - 非常標準的東西。默認情況下,連接池管理器將關閉數據庫連接並將其從池中刪除之前,連接必須閒置多久?如果有任何控制這個設置什麼設置在連接池關閉之前,sql服務器連接必須閒置多久?

This MSDN document只是說

連接池程序刪除從池中的連接,已經閒置了很長一段時間後,或者如果池程序檢測到與服務器的連接已中斷。

回答

7

前幾年的答案下面是這種情況,但現在它已經改變,所以你可以參考source並寫了總結:)


老答案

This excellent article告訴我們需要知道的東西,用反射來揭示連接池的內部運作。

從我的理解來看,'封閉'連接會以半隨機間隔定期清理。清理過程每隔2分鐘到3分鐘50秒之間運行一次,但需要在「關閉」連接正確關閉之前運行兩次。因此,在「關閉」7分鐘40s後,底層的sql連接應該被正確關閉,但可能短至2分鐘。在編寫本文時,在進程中創建的第一個連接池總是有3分鐘10秒的計時器間隔,因此在ADO對象上調用Close()後,通常會看到sql連接在3分10秒和6分20秒之間關閉的某處。

很明顯,這會使用未公開的代碼,因此將來可能會更改 - 或者自該文章寫入後甚至可能發生更改。

0

請通過此:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring%28VS.80%29.aspx

的部分

「下表列出了有效的 名字連接池的ConnectionString內的值 」

似乎是你的興趣。

+0

嗯......唯一可能適合的設置是負載均衡超時,但這不是最長時間,因此增加它應使連接持續更長時間。我想知道「閒置很長時間」是什麼意思默認。如果連接池決定連接已空閒,那麼它不應該依賴於SQL Server連接超時。還有像SQL Server的連接超時這樣的事情嗎? – Rory 2009-07-16 11:44:04

+0

可以使用連接生命週期來決定連接的最長壽命(空閒+使用時間)。 – 2009-07-16 12:02:19