Domanda

Domanda: qual è il modo migliore per trasformare un grande documento XML (> 200 MB) usando XSL in .Net?

Sfondo: Ho un'applicazione che mi fornisce file di dati di grandi dimensioni, non posso cambiare il formato. In passato sono stato in grado di tradurre file di dati più piccoli senza problemi.

Inizialmente stavo lavorando con l'XML come stringhe e la memoria si stava esaurendo molto rapidamente. Ho cambiato il mio codice e ora ho a che fare con MemoryStream per leggere, trasformare usando un foglio di stile e quindi salvare una copia dell'output in una posizione separata usando filestreams.

L'applicazione del foglio di stile fa sì che l'applicazione consumi fino a 1 GB di memoria e alla fine si blocchi.

So che potrei elaborare programmaticamente l'XML usando il DOM, ma mi piacerebbe davvero attenermi a un metodo generico per applicare un foglio di stile XSL.

Qualcuno ha qualche suggerimento su come potrei gestire meglio la memoria durante l'elaborazione della trasformazione XSL? Di seguito è riportato un frammento di codice in cui sto applicando la trasformazione:

'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
        '...

Gli esempi C # o VB vanno bene, posso lavorare con entrambi ... Questa app mi ha tramandato, quindi non critiche per il VB, per favore :) -J

È stato utile?

Soluzione

Stai utilizzando un MemoryStream ed esaurisci la memoria. Hmmm ...

Forse usi invece un FileStream?

Altri suggerimenti

Prova a utilizzare XPathDocument invece di XMLReader. È ottimizzato e molto più veloce.

D

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top