2

问题:在 .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 示例都很好,我可以使用任何一个...这个应用程序是我的手,所以请不要批评 vb :) -J

4

2 回答 2

1

您正在使用 MemoryStream,并且内存不足。嗯……

也许改用 FileStream ?

于 2009-06-17T20:08:29.820 回答
0

尝试使用 XPathDocument 而不是 XMLReader。它经过优化并且速度更快。

D

于 2009-11-02T04:43:15.320 回答