2009-06-17 11 views
2

Question: Quelle est la meilleure façon de transformer un document XML de grande taille (> 200 Mo) en utilisant XSL dans .Net?.Net Transformation de grands documents XML avec XSL

Fond: J'ai une application qui me nourrit de gros fichiers de données, je ne peux pas changer le format. Dans le passé, j'ai été capable de traduire des fichiers de données plus petits sans problème. À l'origine je travaillais avec le XML en tant que chaînes et manquais de mémoire très rapidement. J'ai changé mon code et maintenant je fais affaire avec MemoryStream pour lire, transformer en utilisant une feuille de style, puis enregistrer une copie de la sortie dans un emplacement séparé en utilisant les flux de fichiers. L'application de la feuille de style entraîne la consommation de l'application à plus de 1 Go de mémoire et finit par tomber en panne.

Je sais que je pourrais traiter par programme le XML en utilisant le DOM mais je voudrais vraiment rester avec une méthode générique d'application d'une feuille de style XSL.

Quelqu'un at-il des pointeurs sur la façon dont je pourrais mieux gérer la mémoire lors du traitement de la transformation XSL? Ci-dessous un extrait de code où je pose ma candidature à la transformation:

'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 exemples sont bien je peux travailler avec soit ... Cette application est une main me critique pas si bas pour le vb :) s'il vous plaît -J

Répondre

1

Vous utilisez un MemoryStream et vous manquez de mémoire. Hmmm ...

Peut-être utiliser un FileStream à la place? Essayez d'utiliser XPathDocument au lieu de XMLReader.

+0

J'ai essayé avec le flux de fichiers, mais le processus prend 100x de long. J'essayais en quelque sorte de gérer le flux de mémoire et d'analyser le XML en même temps. J'ai un exemple de fichier de travail en cours d'exécution. Même avec cela quand vous appliquez la feuille de style XSL il consomme une tonne de mémoire, mais au moins il ne plante pas. – Jay

+0

Aller à accepter cela, jamais trouvé une autre option. Je vais devoir souffrir avec les longs temps de chargement. – Jay

0

C'est optimisé et beaucoup plus rapide.

D

Questions connexes