我有一个C#控制台应用程序,其代码如下:
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),正在观看Activity Monitor的进程列表。
当我运行应用程序并点击我的第一个断点(在WriteLine上)时,我很快就会在SSMS进程列表中看到一个进程,其应用程序名称为“.Net SqlClient Data Provider”,其数据库为“master”。
当我F5到第二个断点时,我的期望是该进程将从进程列表中删除,因为我已经关闭了我的SqlConnection。但是,在应用程序关闭之前,该过程仍保留在列表中。
我的假设是该进程仍然在列表中,因为我的连接并未真正关闭。如果我的假设是准确的,那么我还需要做些什么来关闭连接?如果我的假设不准确,那么为什么我的流程仍然列出,如何测试我的连接是否实际正常关闭?
感谢。
答案 0 :(得分:8)
据我所知 - 当您使用Close或Dispose方法时 - 您只是将连接返回到连接池以供重用(连接不会真正关闭) - 您可以获得更多信息{{3} }。
答案 1 :(得分:1)
除了DanNsk的回答,如果连接真的关闭并且没有返回到连接池,可能会重用SPID