2013-05-15 3 views
2

У меня есть следующий код VB.NET, который я использую для преобразования некоторого XML в новый XML, который затем продолжаю обрабатывать. Это одноразовый процесс, а не что-то, что делается много раз, поэтому, насколько я могу судить, никакой эффективности от кеширования не получается.XslCompiledTransform от XmlDocument до XmlDocument

Код работает, но я вижу проблемы с производительностью. Я ценю, что проблемы с производительностью могут быть связаны с XSLT.

Я также нашел примеры разработчиков, имеющих проблемы с производительностью XslCompiledTransform, особенно на 64-битной среде, который может быть ошибка (http://connect.microsoft.com/VisualStudio/feedback/details/508748)

Ни возможные проблемы производительности XSLT, ни проблемы с XslCompiledTransform находятся под моим контролем , но вполне возможно, что есть проблемы с моим кодом. Я просто хочу убедиться, что мой метод преобразования - самый эффективный метод для того, что мне нужно.

Public Function TransformUsingXPathNavigator(ByVal InputXML As XmlDocument, ByVal XSLTLocation As String) As XmlDocument 

    Dim theNavigator As XPathNavigator 
    theNavigator = InputXML.CreateNavigator() 

    Dim theTransform As XslCompiledTransform = New XslCompiledTransform() 
    theTransform.Load(XSLTLocation) 

    Dim outputXML As New XmlDocument() 

    Using writer As XmlWriter = outputXML.CreateNavigator().AppendChild() 
     theTransform.Transform(theNavigator, writer) 
    End Using 

    Return outputXML 

End Function 

Можно ли указать какие-либо проблемы с моим кодом?

Редактировать: Это одноразовое преобразование, поэтому нет петель.

+0

Это преобразование происходит только один раз (за XSLT) или несколько раз? Если этот код выполняется внутри цикла, попробуйте создать объект 'XslCompiledTransform' вне цикла и передав его вместо' XSLTLocation'. Чем меньше раз запускается метод 'Load()', тем лучше. – psmay

ответ

0

Мы не смогли повысить эффективность кода с помощью XslCompiledTransform.

Мы смогли идентифицировать циклы внутри XSLT, которые выполнялись много раз, а при удалении код прошел от 60 секунд до менее 1 секунды.

Однако XSLT оказался вне моего контроля, поэтому мне нужно было найти альтернативное решение. Это было не идеально, но мне пришлось вернуться к устаревшему XslTransform.

Использование XslTransform кода выполняется менее чем за 1 секунду, и это то, что мне нужно.

Вперед XSLT, который мы используем, нужно будет отсортировать, но пока использование устаревшего кода является решением моей проблемы.

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