É uma boa ideia reutilizar objetos de comando ADO.NET?
-
20-09-2019 - |
Pergunta
Estou trabalhando em um programa .NET que executa scripts arbitrários em um banco de dados.
Quando uma colegas começou a escrever o código de acesso ao banco de dados, ele simplesmente expôs um objeto de comando ao restante do aplicativo que é reutilizado (configuração CommandText
/Type
, chamando ExecuteNonQuery()
etc.) Para cada declaração.
Eu imagino que este seja um grande desempenho para declarações repetidas e idênticas, porque elas são analisadas de novo a cada vez.
O que estou me perguntando, no entanto, é: isso também degradará a velocidade de execução se cada declaração for diferente da anterior (não apenas parâmetros diferentes, mas uma declaração totalmente diferente)? Não consegui encontrar facilmente uma resposta sobre isso na documentação.
BTW, o RDBMS usado é o Oracle, mas acho que essa pergunta não é realmente específica do banco de dados.
PS eu sei expor o mesmo Command
O objeto não é seguro, mas isso não é um problema aqui.
Solução
Há algumas despesas gerais envolvidas na criação de novos objetos de comando e, portanto, em certas circunstâncias, pode fazer sentido reutilizar o mesmo comando. Mas, como o caso geral aplicado para uma aplicação inteira, parece mais do que um pouco estranho.
Outras dicas
O desempenho do desempenho geralmente vem do estabelecimento de uma conexão com o banco de dados, mas o ADO.NET cria um pool de conexão para ajudar aqui.
Se você deseja evitar a análise de declarações sempre de novo, pode colocá -las em procedimentos armazenados.
Imagino que seu colega use uma abordagem de estilo antigo que ele herdou de trabalhar em outras plataformas em que reutilizar um objeto de comando fez a diferença.