Entiendo que si instalo un objeto SqlConnection, realmente estoy agarrando una conexión de un grupo de conexiones. Cuando llamo a Open(), se abrirá la conexión. Si llamo al método Close() o Dispose() en ese objeto SqlConnection, se devuelve al grupo de conexiones.¿Cómo forzar a una SqlConnection a cerrar físicamente, mientras usa la agrupación de conexiones?
Sin embargo, eso realmente no me dice si realmente está cerrado, o si todavía tengo una conexión activa a la base de datos.
¿Cómo puedo forzar que una conexión SqlConnection se cierre a nivel de red, o al menos indicar cuándo se cierra?
Ejemplo:
using(SqlConnection conn = new SqlConnection(DBConnString)) {
conn.Open();
SqlCommand cmd = conn.CreateCommand();
...
cmd.ExecuteReader(CommandBehavior.CloseConnection);
...
}
- Primera corrida: 300 ms
- segunda pasada: 100 ms
- tercera carrera: 100 ms
- después de esperar un largo tiempo (30 minutos) : 300 ms
If la conexión estaba VERDADERAMENTE cerrada, la segunda y tercera ejecución también debería ser de 300 ms. Pero sé que la conexión no está verdaderamente cerrada para esas ejecuciones (revisé el monitor de actividad del servidor SQL). No se requieren 200 ms adicionales para realizar la autenticación/etc.
¿Cómo fuerzo la conexión a cerrar realmente?
Ideas
- ¿El CommandBehavior.CloseConnection trabajar? (¿Aparentemente no?)
- ¿Funciona el ajuste "Max Pool Size = 0" en la cadena de conexión? (Esta sería una solución pírrica)
- ¿Dispose() funciona?
Referencias
- artículo en Connection Pooling
- Aquí hay otro que nos dice que Close() doesn't really close la conexión.
- Un artículo sobre pros and cons connection pooling
+1 para que el primer respondedor lea correctamente la pregunta. – Joe
Estoy haciendo esto, pero mi conexión de SQL todavía aparece en sp_who2 y mis AppLocks en sesión de SQL permanecen bloqueados (tengo la intención de que mueran con la conexión). Incluso configuro ['connStrBuilder.Polling = false'] (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close (v = vs.110) .aspx). –