У меня есть приложение реального времени, использующее XSLT1, и я хочу перейти на XSLT2.
В настоящее время я использую Microsoft XSLT1 движок, который выполняет для конкретного XML и XSL в течение 0,1 секунды.
Для преобразования XSLT2 я создал функцию, которая использует XQSharp для выполнения преобразования xslt2. Я использовал те же xml и xsl, и преобразование заняло 0,9 секунды.
Я проанализировал свой код, и оказалось, что более 90% времени обработки вызвано этой строкой:
Дим запрос как Xslt = Xslt.Compile (новый StringReader (inputXsl), querySettings)
У меня вопрос, есть ли способ ускорить этот процесс?
Например, изменив некоторые параметры запроса?
Мой полный код
<WebMethod()> _
Public Function XSLTXQSharp(ByVal inputXml As String, ByVal inputXsl As String) As String
Dim nameTable As XmlNameTable = New NameTable()
Dim xmlReaderSettings As New XmlReaderSettings()
xmlReaderSettings.NameTable = nameTable
Dim document As XdmDocument
Using reader As New StringReader(inputXml)
Using xmlReader As XmlReader = xmlReader.Create(reader, xmlReaderSettings)
document = New XdmDocument(xmlReader)
End Using
End Using
Dim querySettings As New XsltSettings(nameTable)
querySettings.ContextItemType = XdmType.Node
querySettings.ModuleResolver = New XmlUrlResolver()
''' SLOW!!! more then 90 % of execution time
Dim query As Xslt = Xslt.Compile(New StringReader(inputXsl), querySettings)
Dim contextItem As XPathNavigator = document.CreateNavigator()
Dim result As Stream = New MemoryStream()
query.ApplyTemplates(contextItem, result)
'Return dt2.Subtract(dt1).ToString()
result.Position = 0
Using reader As StreamReader = New StreamReader(result)
Return reader.ReadToEnd()
End Using
End Function