Eu preciso fazer algum processamento em bastante grandes arquivos XML (grande aqui sendo potencialmente mais de um gigabyte) em C # incluindo a realização de algumas consultas XPath complexos. O problema que tenho é que a forma padrão que eu normalmente fazer isso através das bibliotecas System.xml gosta de carregar o arquivo inteiro na memória antes que ele faz qualquer coisa com ele, o que pode causar problemas de memória com arquivos desse tamanho.
Eu não preciso estar atualizando os arquivos em tudo apenas lê-los e consultar os dados contidos neles. Algumas das consultas XPath são bastante envolvidos e atravessar vários níveis de relação tipo pai-filho - Eu não tenho certeza se isso vai afetar a capacidade de usar um leitor de fluxo em vez de carregar os dados na memória como um bloco.
Uma maneira que eu posso ver de fazê-lo funcionar é realizar a análise simples usando uma abordagem baseada em fluxo e talvez envolvendo as instruções XPath em XSLT transformações que eu poderia percorrem os arquivos mais tarde, embora pareça um pouco complicado.
Alternadamente eu sei que existem alguns elementos que as consultas XPath não vai se deparar, então eu acho que eu poderia quebrar o documento em uma série de fragmentos menores com base em sua estrutura original árvore, que poderia, talvez, ser pequeno o suficiente para processar na memória sem causando muito estrago.
Eu tentei explicar o meu objetivo aqui, então se eu estou latindo totalmente a árvore errada em termos de abordagem geral eu tenho certeza que as pessoas podem me pôs certo ...













