.Net Преобразование больших XML-документов с помощью XSL
-
06-07-2019 - |
Вопрос
Вопрос:Каков наилучший способ преобразовать большой XML-документ (> 200 МБ) с помощью XSL в .Net?
Предыстория:У меня есть приложение, которое передает мне большие файлы данных, я не могу изменить формат.В прошлом мне удавалось переводить файлы данных меньшего размера без каких-либо проблем.
Первоначально я работал с XML в виде строк, и у меня очень быстро заканчивалась память.Я переключил свой код, и теперь я имею дело с MemoryStream для чтения, преобразования с помощью таблицы стилей, а затем сохранения копии выходных данных в отдельное место с помощью filestreams.
Применение таблицы стилей приводит к тому, что приложение потребляет более 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
Решение
Вы используете MemoryStream, и у вас заканчивается память.Хммм...
Может быть, вместо этого использовать FileStream?
Другие советы
Попробуйте использовать XPathDocument вместо XmlReader.Это оптимизировано и намного быстрее.
D