Pergunta

Pergunta: Qual é a melhor maneira de transformar um documento XML grande (> 200 MB) usando XSL em .Net

?

Fundo: Eu tenho um aplicativo que me alimenta grandes arquivos de dados, não pode alterar o formato. No passado eu ter sido capaz de traduzir arquivos de dados menores, sem problemas.

Inicialmente eu estava trabalhando com o XML como cordas e estava ficando sem memória muito rapidamente. Troquei meu código e agora eu lidar com MemoryStream de ler, transformação usando uma folha de estilo e salve fora de uma cópia da saída para um local separado usando FileStreams.

A aplicação da folha de estilo faz com que o aplicativo para consumir mais de memória de 1 GB e, eventualmente, deixa de funcionar.

Eu sei que poderia programaticamente processar o XML usando o DOM, mas eu realmente gostaria de ficar com um método genérico de aplicar uma folha de estilo XSL.

Alguém tem qualquer ponteiros sobre como eu poderia gerenciar melhor memória ao processar a transformação XSL? Abaixo está um trecho de código onde eu estou aplicando a transformação:

'xmlData is a memory stream passed into a function 
        '...
    Dim strfilepath As String = appConfigSettings.FilePaths.XslFilePath & "\" & odtrow.formatterXsl

 Dim xslt As New System.Xml.Xsl.XslCompiledTransform()
 xslt.Load(strfilepath)

 Dim xmlRead As XmlReader = XmlReader.Create(xmlData)

 newStream = New MemoryStream()
 xslt.Transform(xmlRead, Nothing, newStream) 'here is where it fails
 newStream.Position = 0
        '...

C # ou VB exemplos são muito bem que eu possa trabalhar com qualquer um ... Este aplicativo foi uma mão-me para baixo, para não críticas para o vb por favor :) -J

Foi útil?

Solução

Você está usando um MemoryStream, e você ficar sem memória. Hmmm ...

Talvez usar um FileStream vez?

Outras dicas

Tente usar XPathDocument em vez de XMLReader. Ele é otimizado e muito mais rápido.

D

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