Pergunta

Por exemplo, eu preciso preencher muitos dados de dados com o método de preenchimento () de sqldataadapter:

DataAdapter1.Fill(DataTable1);
DataAdapter2.Fill(DataTable2);
DataAdapter3.Fill(DataTable3);
DataAdapter4.Fill(DataTable4);
DataAdapter5.Fill(DataTable5);
....
....

Mesmo todos os objetos DataAdapter usam o mesmo SQLConnection, cada método de preenchimento abrirá e fechará a conexão, a menos que o estado de conexão já esteja aberto antes da chamada do método.

O que eu quero saber é como a abertura e fechamento desnecessariamente de sqlConnections afeta o desempenho do aplicativo. Quanto ele precisa escalar para ver os efeitos ruins desse problema (100.000 de usuários simultâneos?). Em um site de tamanho médio (diariamente 50000 usuários), vale a pena se preocupar e pesquisar todas as chamadas de preenchimento (), mantendo-as juntas no código e abrindo a conexão antes de qualquer chamada de preenchimento () e fechar depois?

Foi útil?

Solução

O ADO.NET possui pool de conexões, por exemplo, quando você fecha uma conexão, ele não está realmente completamente fechado, mas "reciclado" se você pedir uma nova conexão com exatamente a mesma string de conexão.

No entanto - se você já conhecer Antes do tempo que você terá que chamar esses cinco métodos de preenchimento um por um, eu definitivamente recomendaria

  • abrindo a conexão
  • Lendo todas as cinco tabelas de dados do banco de dados
  • Fechando a conexão novamente imediatamente

É aceito prática recomendada dessa maneira, não machuca você - então faça isso! :-)

Marc

PS: O pool de conexões no ADO.net, é claro, funciona apenas se você não desligá -lo! :-) está por padrão - você teria que desativá -lo explicitamente.

Outras dicas

Ponto chave:

  • Por que abrir, manter e reutilizar conexões?

    atuação

Há muitas razões pelas quais você pode abrir e fechar conexões. Você tem que decidir onde está a melhor troca para sua usar. Você pode fazer as duas coisas: use uma conexão aberta por um período de tempo e/ou um número definido de transações, feche -a e abra uma nova.

Abrir e fechar conexões SQL é caro Quando comparado a outras tarefas simples no banco de dados. Mas se sua A tarefa real já está demorada, a sobrecarga extra não pode ser notada (se você já está escondendo o período de espera da tarefa real - para que o usuário não comece a clicar aleatoriamente em coisas - como tentar novamente).

Caso de teste:

Você pode medir sua diferença escrevendo duas versões de uma consulta de teste. Selecione qualquer tarefa simples SQL (precisa ser o mesmo em cada versão).

Na versão 1, faça isso com uma única conexão aberta constante fora O loop, loop através da sua tarefa simples x número de vezes.

No segundo, faça isso com a abertura e o fechamento da conexão lado de dentro o laço.

Altere o número X de vezes para combinar sua uso e expectativas. Isso deve dar a você uma sensação muito boa do impacto em sua sistema.

Espero que ajude você a entender o básico ... Jack.

Resposta Necro: A melhor maneira é colocar a conexão em uma declaração 'usando' para que seja escopo para o trabalho necessário:

using (SqlConnection conn = new SqlConnection())
{
    DataAdapter1.Fill(DataTable1);
    DataAdapter2.Fill(DataTable2);
    DataAdapter3.Fill(DataTable3);
    DataAdapter4.Fill(DataTable4);
    DataAdapter5.Fill(DataTable5);
    ...
    ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top