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.StateChangeevento para monitorar as mudanças no estado da conexão (e pode ser armazenado localmente) em vez de verificar aDbConnection.Statepropriedade diretamente. Isso irá economizar custos de desempenho.