Manipulação de XML Gigante

02/01/2013

0

Pessoal,

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

Flavia Santos

Responder

Posts

02/01/2013

Robson Alves

Oi Flávia!

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.

Responder

02/01/2013

Flavia Santos

Oi Robson, obrigada pelo retorno!

Não estou usando o XML Reader, vou fazer alguns testes.

Obrigada!
Responder

02/01/2013

Flavia Santos

Eu não tive uma melhora de desempenho significativa usando um XMLReader e convertendo-o para Dataset.
Responder

02/01/2013

Robson Alves

houve erros?
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.

Responder

02/01/2013

Flavia Santos

houve erros?
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.

Responder

02/01/2013

Robson Alves

Quanto tempo de processamento?
Responder

02/01/2013

Robson Alves

Veja esses dois exemplos:

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.
Responder

02/01/2013

Flavia Santos

Veja esses dois exemplos:

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...
Responder

02/01/2013

Robson Alves

Já utilizou integration services?
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...
Responder

02/01/2013

Robson Alves

Já vi usarem o BulkInsert.
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.
Responder

25/07/2013

José

Como a dúvida aparentemente foi sanada, estou dando o tópico por concluído.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar