.Net Transformando docs grande XML com XSL
-
06-07-2019 - |
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
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