我有一个使用XSLT1的实时应用程序,我想升级到XSLT2。目前,我正在使用,它在0.1秒内执行特定的xslt1和xsl操作。
对于XSLT2转换,我创建了一个使用XQSharp执行xslt2转换的函数。我使用了相同的xml和xsl,转换花费了0.9秒。
我分析了我的代码,结果发现超过90%的处理时间是由这一行造成的:
Dim查询为Xslt =Xslt.Compile(新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发布于 2011-07-21 21:16:41
尝试更改优化级别。它是静态上下文设置上的一个属性。看到您正在尝试编译的转换将是有帮助的。
请注意,Microsoft编译器非常快速,它编译成字节码。XQSharp倾向于使用更复杂的样式表,或者XSLT2.0特性(例如,对于每个组)正在取代XSLT1.0中键的使用。
发布于 2011-07-21 14:16:28
您可能会发现,您需要使用一个特定于XQSharp的论坛。
在这种情况下,是否使用大型复杂样式表来转换小型源文档?
您没有办法分摊编译样式表的成本,然后缓存结果以用于许多转换吗?开发人员经常会认为,如果代码减少了运行时的执行时间,那么编译期间优化代码的时间就会花得很好--这似乎与编写此工作负载的方式不同。
从纯粹自私的角度来看,我很想知道这些数字与撒克逊的比较情况。
https://stackoverflow.com/questions/6775613
复制相似问题