Почему мой SqlConnection остается в списке процессов SSMS после его закрытия?

У меня есть консольное приложение 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), и я наблюдаю за списком процессов в мониторе активности.

Когда я запускаю приложение и достигаю своей первой точки останова (на линии записи), я вскоре вижу процесс в списке процессов SSMS, имя приложения которого ".Net SqlClient Data Provider", а база данных "master".

Когда я перейду к следующей точке останова F5, я ожидаю, что процесс будет удален из списка процессов, так как я закрыл SqlConnection к этому моменту. Однако процесс остается в списке, пока приложение не закроется.

Я предполагаю, что процесс остается в списке, так как мое соединение на самом деле не закрывается. Если мое предположение верно, то что еще мне нужно сделать, чтобы закрыть соединение? Если мое предположение является неточным, то почему мой процесс все еще указан и как я могу проверить, было ли мое соединение действительно закрыто должным образом?

Благодарю.

2 ответа

Решение

Как я знаю - когда вы используете метод Close или Dispose - вы просто возвращаете свое соединение в пул соединений для повторного использования (соединение не будет действительно закрыто) - вы можете получить больше информации здесь.

В дополнение к ответу DanNsk, возможно, SPID используется повторно, если соединение действительно закрыто и не возвращено в пул соединений.

Другие вопросы по тегам