使用XslCompiledTransform从XmlDocument到XmlDocument

3
我有以下VB.NET代码,用于将一些XML转换为新的XML,然后继续处理。这是一次性过程,不是多次执行,因此我认为从缓存中获得效率并没有优化的空间。
代码可以工作,但我遇到了性能问题。 我知道性能问题可能与XSLT有关。
我还发现开发人员在64位环境下使用XslCompiledTransform时出现性能问题,这可能是一个错误(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

有人能指出我的代码存在的问题吗?

编辑:这是一次性转换,所以没有循环。


这个转换只会发生一次(每个XSLT),还是多次?如果此代码在循环内运行,请尝试在循环外创建XslCompiledTransform对象,并将其传递到XSLTLocation的位置。Load()方法运行的次数越少,效果越好。 - psmay
1个回答

0

我们无法通过XslCompiledTransform来提高代码的效率。

我们能够识别出在XSLT中运行多次的循环,当移除这些循环后,代码从需要60秒以上的时间变为不到1秒。

然而,XSLT超出了我的控制范围,所以我需要找到另一种解决方案。虽然不是理想的,但我不得不回到过时的XslTransform。

使用XslTransform,代码运行时间少于1秒,这正是我所需要的。

未来,我们将需要解决使用的XSLT问题,但现在使用过时的代码是解决我的问题的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接