Tengo mi lógica empresarial implementada en clases estáticas simples con métodos estáticos. Cada uno de estos métodos abre / cierra la conexión SQL cuando se llama:
public static void DoSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Pero creo que evitar abrir y cerrar una conexión ahorra rendimiento . Hice algunas pruebas hace mucho tiempo con la clase OleDbConnection (no estoy seguro sobre SqlConnection), y definitivamente ayudó a trabajar así (por lo que recuerdo):
//pass the connection object into the method
public static void DoSomething(string something, SqlConnection connection)
{
bool openConn = (connection.State == ConnectionState.Open);
if (!openConn)
{
connection.Open();
}
// ....
if (openConn)
{
connection.Close();
}
}
Entonces la pregunta es: ¿debo elegir el método (a) o el método (b)? Leí en otra pregunta de stackoverflow que la agrupación de conexiones me ahorró rendimiento, no tengo que molestarme en absoluto ...
PD. Es una aplicación ASP.NET: las conexiones solo existen durante una solicitud web. No es una aplicación o un servicio para ganar.
DbConnection.StateChange
evento para monitorear los cambios en el cambio de estado de la conexión (y puede almacenarse localmente) en lugar de verificar laDbConnection.State
propiedad directamente. Le ahorrará costes de rendimiento.