Pergunta

Eu estou usando analisador expatriados para analisar um arquivo XML de cerca de 15 GB. O problema é ele lança um erro "Out of Memory" e os aborts do programa.

Eu quero saber tem qualquer órgão enfrentou um problema semelhante com o analisador expatriados ou é um bug conhecido e foi corrigida em versões posteriores?

Foi útil?

Solução

Eu usei expatriados para analisar grandes arquivos antes e nunca tive qualquer problema. Eu estou supondo que você está usando SAX e não um dos invólucros DOM expatriados. Se você estiver usando DOM, então esse é o seu problema lá -. Que seria, essencialmente, tentar carregar o arquivo inteiro na memória

Você está alocando objetos como você analisar o XML e talvez não desalocá-los? Essa seria a primeira coisa que eu iria verificar. Uma maneira de verificar se o problema é realmente com expatriados ou não - se você reduzir o programa para uma versão simples que tem manipuladores de tag vazio (ou seja, apenas analisa o arquivo e não faz nada com os resultados) ele ainda ficar sem memória?

Outras dicas

Eu não sei expatriados em tudo, mas eu acho que ele é ter de segurar demasiado estado na memória por algum motivo. É o mal XML formado de alguma forma? Você tem manipuladores registrados para tags de fim de grandes blocos?

Estou pensando que se você tiver um manipulador registrado para o fim de um bloco grande, e expatriados é esperada para passar o bloco para o manipulador, então expatriados poderia ser a falta de memória antes que seja capaz de reunir completamente esse bloco . Como eu disse, eu não sei expatriados, então isso pode não ser possível, eu só estou pedindo.

Como alternativa, você tem certeza que expatriados é onde a perda de memória é? Eu poderia imaginar uma situação onde você estava mantendo algumas informações sobre o conteúdo do arquivo XML, e suas próprias estruturas de dados, seja porque os dados era tão grande, ou por causa de vazamentos de memória em seu código, causou a condição de falta de memória.

Expat é um interpretador orientado a eventos que não construir grandes estruturas na memória. Portanto, não é provavelmente expatriados (que é muito utilizado para analisar arquivos grandes) que é o problema -. Muito mais provável é o seu próprio código

Expat tem vazamentos - Eu comecei a usá-lo em um servidor de longa duração, e estou achando que ele consistentemente vazamentos de memória, se o analisador está livre ou não. Versões mais recentes do xmlparse.c não resolverem este problema, apenas a esconder vazamentos existentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top