質問

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

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

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

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

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の例で問題ありません。どちらでも使用できます... -J

役に立ちましたか?

解決

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

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

他のヒント

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

D

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top