Lembre-se de tudo isso no contexto do ecossistema .Net.
Às vezes, os desenvolvedores desejam "otimizar" seu código para reutilizar seus objetos de conexão. Dado o contexto desta questão, isso quase sempre é um erro.
O ADO.Net possui um recurso chamado Pool de Conexão . Quando você cria e abre um novo objeto de conexão, o que realmente está fazendo é solicitar uma conexão de um pool. Quando você fecha uma conexão, você a retorna para a piscina.
É importante entender os objetos que usamos diretamente no código: SqlConnection, MySqlConnection, OleDbConnectio, etc, são apenas invólucros em torno de uma conexão subjacente real gerenciada pelo ADO.Net, e as conexões reais do ADO.Net são muito "mais pesadas" e mais caras do ponto de vista de desempenho. São esses objetos subjacentes que têm preocupações como autenticação, trânsito de rede, criptografia e essas coisas superam a pequena quantidade de memória no objeto que você realmente vê em seu próprio código.
Ao tentar reutilizar o objeto de conexão, você interrompe a capacidade do ADO.Net de gerenciar efetivamente as conexões subjacentes importantes. Você ganha eficiência na coisa pequena à custa da coisa muito maior.
A reutilização de uma conexão através de um aplicativo ou solicitação http também pode forçá-lo a serializar acidentalmente algo que poderia ser executado em paralelo e tornar-se um gargalo de desempenho. Eu já vi isso acontecer em aplicações reais.
No caso do exemplo de página da Web aqui, em que você mantém pelo menos apenas a pequena conexão durante a duração de uma única solicitação / resposta http, você pode obter ainda mais eficiência avaliando quais consultas são executadas em seu pipeline de solicitação e tenta obter eles até o menor número possível de solicitações separadas para o banco de dados (dica: você pode enviar mais de uma consulta em uma única string SQL e usar DataReader.NextResult()
ou verificar tabelas diferentes em DataSet
para se mover entre elas).
Em outras palavras, em vez de pensar em reutilizar uma conexão para um aplicativo ou solicitação de HTTP versus uma conexão por consulta, pense em termos de uma conexão para cada vez que você chamar o banco de dados ... a cada ida e volta. Em seguida, tente minimizar o número de conexões, minimizando o número dessas viagens. Dessa forma, você pode satisfazer os dois objetivos.
Mas isso é apenas um tipo de otimização. Há também a otimização do tempo do programador e a reutilização efetiva do código. Os desenvolvedores não querem escrever repetidamente o mesmo código padrão apenas para obter um objeto de conexão aberto e pronto para uso. Não é apenas entediante, é uma maneira de introduzir bugs em um programa.
Mesmo aqui, porém, geralmente é melhor ter uma conexão por consulta (ou ida e volta). Existem outros padrões que você pode usar para ajudar a evitar a reescrita do mesmo código padrão. Aqui está um exemplo que eu gosto, mas existem muitos outros.