Настройка производительности XQSharp XSLT2 - PullRequest
0 голосов
/ 21 июля 2011

У меня есть приложение реального времени, использующее 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

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Попробуйте изменить уровень оптимизации. Это свойство статических контекстных настроек. Было бы полезно увидеть преобразование, которое вы пытаетесь скомпилировать.

Обратите внимание, что компилятор Microsoft довольно быстрый и компилируется в байт-код. XQSharp имеет тенденцию побеждать с более сложными таблицами стилей или в тех случаях, когда функции XSLT 2.0 (например, для каждой группы) заменяют использование ключей в XSLT 1.0.

0 голосов
/ 21 июля 2011

Для этого вам может понадобиться форум, посвященный XQSharp.

Это тот случай, когда большая и сложная таблица стилей используется для преобразования небольшого исходного документа?

Нет ли способа амортизировать стоимость компиляции таблицы стилей и последующего кэширования результата для использования во многих преобразованиях? Довольно часто разработчики предполагают, что время, потраченное на оптимизацию кода во время компиляции, будет хорошо потрачено, если оно сократит время выполнения во время выполнения - что, похоже, неверно при написании этой рабочей нагрузки.

С чисто эгоистичной точки зрения мне было бы интересно узнать, как эти цифры сравниваются с саксонскими.

...