2009-06-17 2 views
2

Вопрос: Каков наилучший способ преобразования большого XML-документа (> 200 МБ) с использованием XSL в .Net?.Net Преобразование больших XML-документов с помощью XSL

Фон: У меня есть приложение, которое подает мне большие файлы данных, я не могу изменить формат. Раньше я мог переводить файлы меньшего размера без проблем.

Первоначально я работал с XML как строки и быстро терял память. Я переключил свой код, и теперь я работаю с MemoryStream для чтения, преобразования с использованием таблицы стилей, а затем сохраняю копию копии в отдельном месте с помощью потоков.

Применение таблицы стилей приводит к тому, что приложение потребляет до 1 ГБ памяти и в конечном итоге сбой.

Я знаю, что я мог бы программно обрабатывать XML с помощью DOM, но я действительно хотел бы придерживаться универсального метода применения таблицы стилей 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, и у вас закончилась нехватка памяти. Hmmm ...

Возможно, вместо этого использовать FileStream?

+0

Я пробовал с фильтром, но процесс длится 100 раз. Я пытался каким-то образом управлять memystream и разбирать XML одновременно. У меня есть пример рабочего потока. Даже при этом, когда вы применяете таблицу стилей XSL, она потребляет тонну памяти, но, по крайней мере, она не падает. – Jay

+0

Принимая это, никогда не нашел другого варианта. Мне придется страдать с большим временем загрузки. – Jay

0

Попробуйте использовать XPathDocument вместо XMLReader. Он оптимизирован и намного быстрее.

D

Смежные вопросы