2

質問:.NetでXSLを使用して大きなXMLドキュメント(> 200MB)を変換する最良の方法は何ですか?

背景:大きなデータファイルをフィードするアプリケーションがありますが、形式を変更できません。以前は、問題なく小さなデータファイルを翻訳することができました。

もともと私はXMLを文字列として使用していて、メモリがすぐに不足していました。コードを切り替えて、MemoryStreamを処理し、スタイルシートを使用して読み取り、変換し、ファイルストリームを使用して出力のコピーを別の場所に保存します。

スタイルシートを適用すると、アプリケーションが1 GB以上のメモリを消費し、最終的にクラッシュします。

DOMを使用してプログラムでXMLを処理できることは知っていますが、XSLスタイルシートを適用する一般的な方法に固執したいと思います。

XSL変換の処理中にメモリをより適切に管理する方法について誰かが何かアドバイスを持っていますか?以下は、変換を適用しているコードのスニペットです。

'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#またはVBの例は問題ありません。どちらでも使用できます...このアプリは私に受け継がれたものなので、vbに対する批判はありません:) -J

4

2 に答える 2

1

MemoryStreamを使用していて、メモリが不足しています。うーん...

代わりにFileStreamを使用しますか?

于 2009-06-17T20:08:29.820 に答える
0

XMLReaderの代わりにXPathDocumentを使用してみてください。最適化され、はるかに高速です。

D

于 2009-11-02T04:43:15.320 に答える