XQSharp XSLT2性能调优

时间:2011-07-21 11:55:45

标签: .net xslt xslt-2.0

我有一个使用XSLT1的实时应用程序,我想升级到XSLT2。 目前我正在使用microsoft xslt1引擎,该引擎在0.1秒内执行特定的xml和xsl。

对于XSLT2转换,我创建了一个使用XQSharp执行xslt2转换的函数。我使用了相同的xml和xsl,转换耗时0.9秒。

我分析了我的代码,结果发现超过90%的处理时间是由这一行引起的:

  

Dim query As Xslt = Xslt.Compile(New StringReader(inputXsl),querySettings)

我的问题是有办法加快这个过程吗?

例如通过更改一些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 个答案:

答案 0 :(得分:1)

尝试更改优化级别。它是静态上下文设置的属性。看到你想要编译的转换会很有帮助。

请注意,Microsoft编译器非常快,并且它编译为字节代码。 XQSharp倾向于使用更复杂的样式表获胜,或者XSLT 2.0功能(例如for-each-groups)正在替换XSLT 1.0中的键的使用。

答案 1 :(得分:0)

您可能会发现需要使用特定于XQSharp的论坛。

这是一个大型复杂样式表用于转换小型源文档的情况吗?

您是否无法分摊编译样式表的成本,然后将结果缓存以用于许多转换?通常,开发人员会假设在编译过程中花费时间来优化代码,如果它可以减少运行时执行时间 - 这似乎与编写此工作负载的方式不同。

从纯粹自私的角度来看,我很想知道数字与撒克逊人的比较。

相关问题