2013-05-15 4 views
2

J'ai le code VB.NET suivant que j'utilise pour transformer du XML en nouveau XML, que je continue ensuite à traiter. Ceci est un processus unique, pas quelque chose qui est fait plusieurs fois, donc pas d'efficacité à gagner de la mise en cache, autant que je peux voir.XslCompiledTransform de XmlDocument à XmlDocument

Le code fonctionne, mais je constate des problèmes de performances. J'apprécie que les problèmes de performance peuvent être liés à la XSLT.

J'ai aussi trouvé des cas de développeurs ayant des problèmes de performance avec XslCompiledTransform, en particulier sur un environnement 64 bits, qui peut être un bug (http://connect.microsoft.com/VisualStudio/feedback/details/508748)

Ni les éventuels problèmes de performances XSLT ni des problèmes avec XslCompiledTransform sont sous mon contrôle , mais il est possible qu'il y ait des problèmes avec mon code. Je veux juste m'assurer que ma méthode de transformation est la méthode la plus efficace pour ce dont j'ai besoin.

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 

Quelqu'un peut-il signaler des problèmes avec mon code?

Modifier: Ceci est une transformation unique, donc pas de boucles.

+0

Cette transformation se produit-elle une seule fois (par XSLT) ou plusieurs fois? Si ce code est exécuté dans une boucle, essayez de créer l'objet 'XslCompiledTransform' en dehors de la boucle et passez-le à la place de' XSLTLocation'. Moins la méthode 'Load()' s'exécute, mieux c'est. – psmay

Répondre

0

Nous n'avons jamais pu améliorer l'efficacité du code en utilisant XslCompiledTransform.

Nous avons été en mesure d'identifier des boucles dans le système XSLT qui étaient en cours d'exécution plusieurs fois, et une fois supprimées, le code passait de 60 secondes à moins d'une seconde. Cependant, le XSLT était hors de mon contrôle et donc j'avais besoin de trouver une solution alternative. Ce n'était pas idéal, mais j'ai dû retourner à la XslTransform obsolète.

En utilisant XslTransform, le code s'exécute en moins d'une seconde, ce dont j'ai besoin. À l'avenir, le XSLT que nous utiliserons devra être trié, mais pour l'instant, l'utilisation de code obsolète est la solution à mon problème.