Если пул = false в строке подключения
SqlConnection.Open()
и Close()
будут точно соответствовать созданным и уничтоженным спидам. Это приводит к очень низкой производительности:)
Если пул = true в строке подключения
При вызове SqlConnection.Open()
либо будет использоваться существующее физическое соединение из пула, либо будет создано новое, если в пуле нет доступных.
Создание нового физического соединения создаст новый spid, который будет отображаться в виде новой строки в sys.sysprocesses
и sys.dm_exec_connections
.
Повторное использование существующего пулированного физического соединения просто повторно использует существующий spid, поэтому вы SqlConnection.Open()
не внесете никаких видимых изменений в эти таблицы на стороне сервера. Однако его можно обнаружить с помощью SQL Profiler или XEvent, выполнив поиск sp_reset_connection
, который представляет собой хранимую процедуру, вызываемую SqlClient, которая сообщает серверу очистить состояние соединения (например, убедитесь, что транзакции отсутствуют и т. Д.).
SqlConnection.Close()
обычно возвращает физическое соединение с пулом, поэтому оно не исчезает с сервера. Физические соединения на самом деле закрыты различными способами, например, из-за уничтожения сервером, например kill @spid
и SqlConnection.ClearAllPools()
.
Надеюсь, достаточно подробностей, есть что-нибудь еще, что вы хотели бы знать?