2009-06-17 81 views
2

問題:在.Net中使用XSL轉換大型XML文檔(> 200MB)的最佳方式是什麼?.Net使用XSL轉換大型XML文檔

背景: 我有一個應用程序給我大量的數據文件,我不能改變格式。在過去,我已經能夠翻譯更小的數據文件而沒有問題。

最初我正在使用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

回答

1

您正在使用MemoryStream,並且內存不足。嗯...

也許使用FileStream來代替?

+0

我試過用filestream,但是這個過程需要100x長。我試圖以某種方式管理內存流並同時解析XML。我有一個工作文件流的例子。即使在應用XSL樣式表時,也會消耗大量內存,但至少不會崩潰。 – Jay 2009-06-22 13:36:43

0

嘗試使用XPathDocument而不是XMLReader。它被優化並且更快。

D