Manipulação de XML Gigante
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!
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
Curtidas 0
Respostas
Robson Alves
02/01/2013
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.
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
Flavia Santos
02/01/2013
Oi Robson, obrigada pelo retorno!
Não estou usando o XML Reader, vou fazer alguns testes.
Obrigada!
Não estou usando o XML Reader, vou fazer alguns testes.
Obrigada!
GOSTEI 0
Flavia Santos
02/01/2013
Eu não tive uma melhora de desempenho significativa usando um XMLReader e convertendo-o para Dataset.
GOSTEI 0
Robson Alves
02/01/2013
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.
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
Flavia Santos
02/01/2013
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.
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
Robson Alves
02/01/2013
Quanto tempo de processamento?
GOSTEI 0
Robson Alves
02/01/2013
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.
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
Flavia Santos
02/01/2013
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.
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
Robson Alves
02/01/2013
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...
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
Robson Alves
02/01/2013
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.
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
José
02/01/2013
Como a dúvida aparentemente foi sanada, estou dando o tópico por concluído.
GOSTEI 0