Fórum Manipulação de XML Gigante #431721
02/01/2013
0
Preciso acessar a página de uma empresa parceira, baixar um xml (de cerca de 02 GB) e manipulá-lo na minha aplicação.
Hoje, copio o arquivo da empresa parceira para o meu servidor e tento desiarilizar o xml em um dataset.
Em arquivos menores faço isso sem problemas, mas pelo tamanho do arquivo, além de muito demorado, as vezes ainda ocorre Timeout na operação.
Alguém teria uma dica de como fazer nesse caso?
Obrigada!

Flavia Santos
Curtir tópico
+ 0Posts
02/01/2013
Robson Alves
Você está usando XMLReader?
Ele é o mais performático e não guarda Cache, portanto o erro inicial de Timeout é resolvido!
Depois transforma o reader na fonte de dados necessária.
Gostei + 0
02/01/2013
Flavia Santos
Não estou usando o XML Reader, vou fazer alguns testes.
Obrigada!
Gostei + 0
02/01/2013
Flavia Santos
Gostei + 0
02/01/2013
Robson Alves
Pela quantidade de registro, só se você fizer leituras parciais do arquivo.
Não tenho muito expiriência com Leitura de XML no C#, será possível realizar uma espécie de TOP ?
Sendo sim, você faz uma lógica para lé-lo até o fim, de forma parcial.
Gostei + 0
02/01/2013
Flavia Santos
Pela quantidade de registro, só se você fizer leituras parciais do arquivo.
Não tenho muito expiriência com Leitura de XML no C#, será possível realizar uma espécie de TOP ?
Sendo sim, você faz uma lógica para lé-lo até o fim, de forma parcial.
Erros não, mais continua extremamente lento...
Uma especie de TOP eu teria como fazer usando o LINQ to XML, mas o arquivo já deveria estar carregado na memória.
Não sei se há outras formas, essa é a que conheço.
Gostei + 0
02/01/2013
Robson Alves
Gostei + 0
02/01/2013
Robson Alves
http://www.csharp-examples.net/xpath-top-xml-nodes/
http://www.csharp-examples.net/xml-nodes-by-name/
Seu XML é muito complexo?
Se ele tiver uma estrutura simples de nós, você pode fazer como no exemplo!
Lendo ele de forma parcial, você terá um ganho, mas ainda se trata de 2GB de informações...
A apresentação dessas informações estarão na tela?
Se você quer ganhar "Performance" o certo é partir para uma ideia mais assíncrona e responsiva.
Por exemplo, as informações estão no GRID e só é apresentado 10 linhas, conforme o usuário rolar o scroll, ir no XML e trazer 10 + 10 ...
Abraços.
Gostei + 0
02/01/2013
Flavia Santos
http://www.csharp-examples.net/xpath-top-xml-nodes/
http://www.csharp-examples.net/xml-nodes-by-name/
Seu XML é muito complexo?
Se ele tiver uma estrutura simples de nós, você pode fazer como no exemplo!
Lendo ele de forma parcial, você terá um ganho, mas ainda se trata de 2GB de informações...
A apresentação dessas informações estarão na tela?
Se você quer ganhar "Performance" o certo é partir para uma ideia mais assíncrona e responsiva.
Por exemplo, as informações estão no GRID e só é apresentado 10 linhas, conforme o usuário rolar o scroll, ir no XML e trazer 10 + 10 ...
Abraços.
Então Robson, a estrutura do xml é complexa sim, o arquivo me traz um DataSet com um DataTable pai e 6 DataTables filhos.
Nenhuma informação é exibida em tela, o xml é usado para atualização da base dados de acordo com os produtos disponiveis no parceiro...
Não tenho acesso a base de dados dele, apenas o xml que ele me envia diariamente, sem a possibilidade de alteração do tipo de arquivo/objeto enviado.
Eu tenho uma rotina hoje que funciona, mas ela é pesada e demora mto para executar. As vezes ainda dá Timeout.
Eu queria customizar a rotina melhorando o seu desempenho...
Gostei + 0
02/01/2013
Robson Alves
Sei que vai mudar radicalmente seu ambiente...
Ja importei arquivos enormes por ele... como é integração de bases, funcionava bem rápido..
Não vejo onde ganhar mais performance no seu código .Net, você tem muita informação diária...
Gostei + 0
02/01/2013
Robson Alves
http://msdn.microsoft.com/en-us/library/ms191184.aspx
Existe uma forma de usar o BulkInsert (maquiado) dentro do C#, não sei onde há ganhamos (estou dando essa idéia, por não conhecer seu ambiente).
Abraços.
Gostei + 0
25/07/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)