¿Cómo forzar que una SqlConnection cierre físicamente, mientras se usa la agrupación de conexiones?

Entiendo que si hago una instancia de un objeto SqlConnection, realmente estoy tomando una conexión de un grupo de conexiones. Cuando llamo Open (), se abrirá la conexión. Si llamo al método Close () o Dispose () en ese objeto SqlConnection, se devuelve al grupo de conexiones.

Sin embargo, eso realmente no me dice si está realmente cerrado, o si todavía tengo una conexión activa a la base de datos.

¿Cómo puedo forzar que una SqlConnection cierre en el nivel de la red, o al menos saber cuándo se cierra?

Ejemplo:

using(SqlConnection conn = new SqlConnection(DBConnString)) {

   conn.Open();
   SqlCommand cmd = conn.CreateCommand();
   ...
   cmd.ExecuteReader(CommandBehavior.CloseConnection);
   ...
}
Primera ejecución: 300 msSegunda ejecución: 100 msTercera ejecución: 100 msDespués de esperar mucho tiempo (30 minutos): 300 ms.

Si la conexión se cerraba REALMENTE, la segunda y la tercera ejecución también deberían ser de 300 ms. Pero sé que la conexión no está realmente cerrada para esas ejecuciones (verifiqué el monitor de actividad del servidor SQL). No se necesitan 200 ms adicionales para realizar la autenticación / etc.

¿Cómo fuerzo la conexión para cerrar realmente?

Ideas

¿Funciona CommandBehavior.CloseConnection? (¿aparentemente no?)¿Funciona el ajuste "Tamaño máximo de grupo = 0" en la cadena de conexión? (esto seria una solucion pirrica)¿Funciona Dispose ()?

Referencias

Artículo sobreConexión de agrupaciónAquí hay otro que nos dice queCerrar () realmente no cierra la conexión.Un artículo sobrepros y contras de conexión de agrupación

Respuestas a la pregunta(7)

Su respuesta a la pregunta