從我的理解來看,.Net會將SqlConnection
對象的連接字符串默認設置爲相同的對象。如果我調用Dispose方法,連接仍然會被合併嗎?SqlConnection的Dispose方法會干擾連接池嗎?
在ASP.NET應用程序的上下文中詢問此問題,該應用程序有時會在單個PageLoad
事件中向數據庫發出多次命中。我希望將連接集中起來,但希望確認數據操作完成後關閉和處理連接不會影響.NET處理連接池。
從我的理解來看,.Net會將SqlConnection
對象的連接字符串默認設置爲相同的對象。如果我調用Dispose方法,連接仍然會被合併嗎?SqlConnection的Dispose方法會干擾連接池嗎?
在ASP.NET應用程序的上下文中詢問此問題,該應用程序有時會在單個PageLoad
事件中向數據庫發出多次命中。我希望將連接集中起來,但希望確認數據操作完成後關閉和處理連接不會影響.NET處理連接池。
使用連接池時,關閉SqlConnection
只是告訴連接池您已完成連接池。然後池將決定是否實際關閉連接或重新使用連接。
如果的SqlConnection超出範圍,它不會被關閉。因此,您必須通過調用Close或Dispose來顯式關閉連接。 Close和Dispose在功能上是等效的。如果連接池值Pooling設置爲true或yes,則將底層連接返回到連接池。另一方面,如果將Pooling設置爲false或否,則關閉到服務器的基礎連接。
上SQL Server Connection Pooling MSDN文檔說
連接被釋放回池中時,它們被關閉或 配置
和
我們強烈建議您當您的 是f時,請始終關閉連接使用它,以便連接將返回到 池。你可以做到這一點使用或者關閉或Dispose Connection對象的方法...
而且,它是的連接池,來決定是否將連接從池中刪除
的的連接池去除池中的連接已 空閒了很長一段時間後,或者如果池程序檢測到與服務器的 連接已中斷
從我的理解,.NET可以凝聚的SqlConnection對象
沒有,SQL供應商將彙集到SQL Server的基本連接(基於連接字符串單獨的池)。
的SqlConnection
對象將獲得一個池的連接(或創建一個新的,等的基礎上,什麼配置池,池連接是否可用)時Open
被調用時,會釋放連接時Close
或Dispose
是調用。
這兩個概念(SqlConnection
對象和實際連接到SQL Server)是不同的,但顯然有些相關。
關於你的第一點這是我的想法,但我在我的答案中指出的MSDN文檔似乎不明確「創建池時,會創建多個連接*對象*並將其添加到池中,以便最小池大小需求滿足「和」當請求SqlConnection對象時,如果可用連接可用,則從池中獲取它「??我認爲這是誤導,因爲它與文檔中的某些觀點相矛盾。 –
@cpedros - 是的,我會說這是誤導 - 它是「連接對象」(模糊的底層連接)和「SqlConnection對象」 - 「SqlConnection」 s是管理對象,您可以創建它們的10000個,所有共享一個連接字符串與Max Pool = 100。當您嘗試同時打開所有這些文件時,它會失敗。 –