none
DataTable Lento RRS feed

  • Pergunta

  • Boa Tarde, Galera

    Tenho a rotina abaixo. Eu precisaria agilizar esta rotina ela demora muito para processar, alguém saberia me dizer como eu poderia fazer isso ?

    O Select efetuado no DataSet dsParam pode trazer mais de 1 linha.

                            DataTable dtEndereco = new DataTable();

                            foreach (DataRow drEnd in dsParam.Tables["Endereco"].Select(string.Format("ID = {0} AND Documento = '{1}'", drNotas["ID"].ToString(), Documento)))
                            {
                                dtEndereco.ImportRow(drEnd);

                                dtEndereco.Rows[l]["ID"] = int.Parse(ID_Ini) * -1;
                                dtEndereco.Rows[l]["Documento"] = Documento_Ini;
                                l++;
                            }


    • Editado Muekita quinta-feira, 4 de maio de 2017 17:21 inclusão de dados
    quinta-feira, 4 de maio de 2017 17:04

Respostas

  • Mesmo existindo o comando GC.Collect que aciona o Garbage Collector, não há garantia que os objetos serão dispensados naquele exato momento. Além disso é uma prática ruim chamar o GC.Collect manualmente. E por último as chances disso resolver seu problema de lentidão são mínimas.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    • Marcado como Resposta Muekita sexta-feira, 5 de maio de 2017 17:39
    sexta-feira, 5 de maio de 2017 16:43

Todas as Respostas

  • Alguém teria alguma dica para me ajudar
    sexta-feira, 5 de maio de 2017 10:41
  • Bom dia,

    Quantos registros estão na DataTable Endereco? 


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 5 de maio de 2017 11:00
  • No range que estou utilizando tem 185621 registros, mas pode haver muito mais dependendo do range da data.
    sexta-feira, 5 de maio de 2017 11:36
  • E você precisa trabalhar com esses dados desconectados, ou seja, trazer 200 mil registros pra memória e trabalhar com eles?

    Não pode converter para DataReader e trazer apenas o que precisa?


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 5 de maio de 2017 11:49
  • Eu preciso trabalhar dessa forma, devido a estrutura que foi montada. Com relação a converter para um DataReader eu não fiz por achar q não agilizaria muito o processo
    sexta-feira, 5 de maio de 2017 11:56
  • Com o DataReader você iria fazer seu SELECT já com os filtros que você passa no DataTable e não guardaria tanta informação em memória. Portanto, sugiro fortemente a refatoração de seu código.

    Com esse volume de informações, se for manipular via DataSet/DataTable e ainda por cima duplicando (já que importa os valores para outro DataTable), fica meio complicado melhorar a performance.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 5 de maio de 2017 12:29
  • Entendi, mas refatorar realmente não será possivel. Por que quando dou um dispose no objeto DataTable que eu criei não diminui o consumo de memoria, teria ideia ?

    Teria algum esquema de trabalhar esses dados de DataTable ou DataSet com XML ?

    sexta-feira, 5 de maio de 2017 13:51
  • Quando você invoca o dispose, não é no mesmo momento que o Garbage Collector executa.

    Com XML você terá que carregar muitas informações em memória da mesma forma. De qualquer modo o DataSet possui método para retornar seu conteúdo como XML.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 5 de maio de 2017 13:55
  • Então na sua opinião o XML não adiantaria muita coisa.

    E teria algo para eu fazer para eu limpar a memoria de imediato ?

    sexta-feira, 5 de maio de 2017 16:11
  • Mesmo existindo o comando GC.Collect que aciona o Garbage Collector, não há garantia que os objetos serão dispensados naquele exato momento. Além disso é uma prática ruim chamar o GC.Collect manualmente. E por último as chances disso resolver seu problema de lentidão são mínimas.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    • Marcado como Resposta Muekita sexta-feira, 5 de maio de 2017 17:39
    sexta-feira, 5 de maio de 2017 16:43