为什么我的SqlConnection在关闭后仍保留在SSMS进程列表中

本文关键字:SSMS 保留 进程 列表 我的 SqlConnection 为什么 | 更新日期: 2023-09-27 18:00:51

我有一个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(,正在查看活动监视器的进程列表。

当我运行应用程序并到达第一个断点(在WriteLine(时,我很快就会在SSMS进程列表中看到一个进程,其应用程序名称为".Net SqlClient Data Provider",其数据库为"master"。

当我F5到第二个断点时,我的期望是该进程将从进程列表中删除,因为此时我已经关闭了SqlConnection。但是,在应用程序关闭之前,该进程仍保留在列表中。

我的假设是,这个过程仍然在列表中,因为我的连接并没有真正关闭。如果我的假设是准确的,那么我还需要做什么来关闭连接?如果我的假设不准确,那么为什么我的流程仍然被列出,以及我如何测试我的连接是否真的正确关闭?

谢谢。

为什么我的SqlConnection在关闭后仍保留在SSMS进程列表中

正如我所知,当您使用Close或Dispose方法时,您只是将连接返回到一个连接池以供重用(连接不会真正关闭(,您可以在这里获得更多信息。

除了DanNsk的答案之外,如果连接真的关闭并且没有返回到连接池

,那么SPID可能会被重用