Tenho minha lógica de negócios implementada em classes estáticas simples com métodos estáticos. Cada um desses métodos abre / fecha a conexão SQL quando chamado:
public static void DoSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Mas acho que evitar abrir e fechar uma conexão economiza desempenho . Eu fiz alguns testes loooongo tempo atrás com a classe OleDbConnection (não tenho certeza sobre SqlConnection) e definitivamente ajudou a trabalhar assim (pelo que me lembro):
//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();
}
}
Portanto, a questão é - devo escolher o método (a) ou método (b)? Eu li em outra questão de stackoverflow que o pool de conexão salvou o desempenho para mim, eu não tenho que me preocupar ...
PS. É um aplicativo ASP.NET - as conexões existem apenas durante uma solicitação da web. Não é um aplicativo ou serviço win.
DbConnection.StateChange
evento para monitorar as mudanças no estado da conexão (e pode ser armazenado localmente) em vez de verificar aDbConnection.State
propriedade diretamente. Isso irá economizar custos de desempenho.