none
Performance linq to datatable x acesso direto ao bd RRS feed

  • Pergunta

  • Boa tarde,

    gostaria de saber o que tem melhor performance dentre as opções abaixo:

    1) Acessar o banco a cada consulta de produto, cliente etc.

    2) Carregar toda a estrutura em datatable ( somente 1 acesso ao banco ) e realizar as consultas no datatable utilizando linq.

    Atualmente estou usando a primeira opção, em horários de pico minha aplicação está travando, estou achando que possa ter relação com os vários acessos ao banco simultaneamente.

    Toda ajuda é bem vinda.

    Daniela


    • Editado dani.ela segunda-feira, 10 de fevereiro de 2014 17:45
    segunda-feira, 10 de fevereiro de 2014 17:44

Respostas

  • dani.ela,

    Acredito que a primeira opção realmente seja a melhor entre as duas, pois na segunda opção vc pode deixar dados alocado na memoria desnecessariamente........ agora essa questão do travamento da aplicação vc terá q fazer alguns testes ..... pois pode ser um alto trefego na rede da empresa , tbm tem a questão do banco de dados , pode ser alguma DTS , Procedure algo q pode estar levando o sua base a travar !!!!! mas acredito q não seja a aplicação em si pelo fato de vc dizer q isso acontece em um determinado período do dia !!!!!!!!!!!!!!!



    Diego Almeida Barreto
    System Analyst / Software Developer

    • Marcado como Resposta Giovani Cr segunda-feira, 17 de fevereiro de 2014 12:29
    terça-feira, 11 de fevereiro de 2014 00:57

Todas as Respostas

  • Daniela tudo depende... Da quantidade de dados que você está trafegando, mas está fazendo o correto sim, só mudaria em vez de armazenar um datatable usaria List<T> para os dados, e continuaria fazendo as consultas p cada tipo.. A não ser que o banco de dados nao sofra atualizacao desses itens por isso cada caso é um caso..

    Mas a 1 opção seria a mais pratica, essa lentidão pode ser causada por varios fatores, como consultas em tabelas enormes, tragefo na rede, modo de pesquisar, limpar memoria.... Você retira os objetos da memoria apos utilizar...

    segunda-feira, 10 de fevereiro de 2014 17:52
  • Olá Daniel,

     não entendi sua resposta. Estou usando a primeira opção, você acha que a segunda opção tem uma performance melhor? 

    Eu realmente não limpo a memória, a

    o cenário da aplicação é mais ou menos assim:

    Operador acessa o sistema; -ACESSO AO BANCO-

    Operador busca um cliente; -ACESSO AO BANCO-

    Operador busca um estabelecimento; -ACESSO AO BANCO-

    Operador seleciona um estabelecimento;  -SALVA O ESTABELECIMENTO EM UMA SESSION-

    Operador seleciona um cliente; -SALVA O CLIENTE EM UMA SESSION-

    Operador busca produtos;  -ACESSO AO BANCO-

    Operador seleciona um produto; -SALVA UMA LISTA DE PRODUTOS EM UMA SESSION-

    Cada usuário opera com 12 Session

    A cada pedido finalizado as informações salvas na sessions já não tem mais usabilidade, pois, para o novo pedido serão carregadas novas informações, entretanto eu não limpo a memória, pensei que o garbage collector fazia isso sozinho.

    Daniela



    • Editado dani.ela segunda-feira, 10 de fevereiro de 2014 18:30
    segunda-feira, 10 de fevereiro de 2014 18:30
  • Está correto do modo que está fazendo, daniela essa lentidão não está sendo causada por essas suas sessions não ? Pois a session usa memoria do servidor....

    Quantos mais usuarios mais consumo em seu servidor... Testou com poucos usuarios e ficou rapido ou lento tbm ?

    segunda-feira, 10 de fevereiro de 2014 18:40
  • Usuários logados sempre é a mesma quantidade. A diferença é que em horários de picos todos estão operando juntos.

    A lentidão/travamento acontece quando todos os usuários estão operando juntos.

    Para cada venda eu carrego uma classe inteira dentro de uma session, sendo que, são 12 session para cada usuário.

    Essa foi a única maneira que eu encontrei de não perder  as informações, porque, todos os dados do cliente / loja são selecionados no incio, após isso é inciado o pedido e no final do pedido eu preciso enviar o mesmo para a loja selecionada e nesse momento eu preciso recuperar as informações do cliente/loja.

    Daniela

    segunda-feira, 10 de fevereiro de 2014 19:25
  • Sem saber da codificação e complicado!

    mas, a primeira é a melhor!


    Fulvio Cezar Canducci Dias

    terça-feira, 11 de fevereiro de 2014 00:50
  • dani.ela,

    Acredito que a primeira opção realmente seja a melhor entre as duas, pois na segunda opção vc pode deixar dados alocado na memoria desnecessariamente........ agora essa questão do travamento da aplicação vc terá q fazer alguns testes ..... pois pode ser um alto trefego na rede da empresa , tbm tem a questão do banco de dados , pode ser alguma DTS , Procedure algo q pode estar levando o sua base a travar !!!!! mas acredito q não seja a aplicação em si pelo fato de vc dizer q isso acontece em um determinado período do dia !!!!!!!!!!!!!!!



    Diego Almeida Barreto
    System Analyst / Software Developer

    • Marcado como Resposta Giovani Cr segunda-feira, 17 de fevereiro de 2014 12:29
    terça-feira, 11 de fevereiro de 2014 00:57
  • Vou passar um pente fino aqui, isso esta me matando!!
    terça-feira, 11 de fevereiro de 2014 11:11