2011-07-02 27 views
3

我有下面的代碼C#控制檯應用程序:爲什麼我的SqlConnection在關閉之後仍保留在SSMS Processes列表中?

using (var cn = new SqlConnection()) 
{ 
    cn.ConnectionString = "Data Source=localhost;Integrated Security=True;Persist Security Info=False"; 
    cn.Open(); 

    System.Console.WriteLine("past open"); 
} 

System.Console.ReadLine(); 

在運行時,我設置兩個斷點。一個在WriteLine,一個在ReadLine。我還打開了Sql Server Management Studio(SSMS)並正在監視活動監視器的進程列表。

當我運行應用程序並命中我的第一個斷點(在WriteLine)時,我很快看到一個Process,在SSMS Processes列表中,其應用程序名稱爲「.Net SqlClient Data Provider」,其數據庫爲「master」 。

當我F5到第二個斷點時,我的期望是該進程將從進程列表中刪除,因爲我已經通過該點關閉了我的SqlConnection。但是,該過程將保留在列表中,直到應用程序關閉。

我的假設是該進程仍然在列表中,因爲我的連接並不真正關閉。如果我的假設是準確的,那麼我還需要做些什麼才能關閉連接?如果我的假設不準確,那麼爲什麼我的流程仍然列出,我如何測試我的連接是否真正關閉?

謝謝。

回答

8

正如我所知 - 當您使用Close或Dispose方法時 - 您只是將連接返回到連接池以重用(連接不會真正關閉) - 您可以獲得更多信息here

+0

感謝DanNsk。順便說一句,MSDN頁面表示,池中的連接在「閒置」很長時間後會從池中移除。你知道是否有辦法控制空閒超時? – Craig

+0

這是不可配置的(或甚至可讀超時)。 – DanNsk

1

除了DanNsk的答案,也可能是該SPID被重用連接是否真的關閉,而不是返回到連接池

相關問題