Je me demandais s'il y a des différences de performance lorsque vous utilisez des questions
4 Réponses :
Notez que ce est l'équivalent de votre première instruction. P> Il y aura une différence de performance, car les méthodes font des choses très différentes sous la hotte. . Cependant, optimiser les opérations purement en mémoire est un peu inutile, à moins que vous traitez avec un ensemble de données volumineux. Si vous avez affaire à un ensemble de données volumineux, vous devriez mesurer la performance des deux alternatives plutôt que d'essayer de prédire lequel on fonctionnera plus rapidement. P> P>
Sauf qu'il travaille avec d'énormes fichiers XML (comme 1GIG ou plus grand) - il peut alors vouloir faire une référence (il devrait jeter un coup d'œil sur la façon d'écrire une microbenchmark correcte: Stackoverflow.com/Questtions/504103/... A >)
@Christian: Y a-t-il des preuves que l'utilisation de XPathSelectelement a une différence de performance "minuscule". Je ne dis pas que ce n'est pas vrai, mais comment est-ce connu. La seule façon dont il pourrait être minuscule est si l'expression XPath résultante est compilée et mise en cache. C'est vrai de XPath dans le système.xml mais est-ce la même chose dans Linq-to-XML? Existe-t-il une documentation ou un blog d'équipe MS ou certains tests de comparaison affichés sur le Web qui en porte?
@rebugger: plus l'opération de recherche réelle est importante, moins les différences entre les deux approches seront importantes. Il n'y a pas de recherche réelle XPath, une seule analyse de XPath à une expression équivalente LINQ-TO-XML. Bien sûr, si ce code est exécuté dans une boucle pilotée par le grand XML, l'approche XPath serait certainement plus lente.
Pas exactement équivalent - si le nœud n'est pas trouvé, document.elements.Elements ("Acteurs"). Éléments ("Acteur") retourneront un iNumérable
@Webveloper: Vous êtes correct, j'ai ajouté une méthode supplémentaire pour traiter cela.
Oui, il y aura bien que les deux lignes ne soient pas équivalentes.
Le XPATH doit être analysé finalement dans une expression LINQ qui ferait alors cela: - p>
var x = document.Elements("actors").Elements("actor");
On dirait qu'il y ait un coup, quelqu'un d'autre a fait le travail d'analyse comparative: http://blog.dreamlabsolutions.com/post/2008/12/04/linq-to-xml-and-linq-to-xml-with-xpath-Performance-Review.aspx p>
Je pense que l'analyse comparative est un peu défectueuse car elle compare les expressions de "//" XPath pour accéder aux descendants directs.
de mes tests limités, les performances semblent très similaires. J'ai pris un exemple de message XML de http : //msdn.microsoft.com/en-us/library/windows/desktop/ms762271 (v = vs.85) .aspx
xpath: p> Query Linq: P> from bookElement in xmlElement.Descendants( "book" )
where bookElement.Attribute( "id" ).Value == "bk109"
select bookElement
XPathDocument CODE> entraîne une très grande empreinte mémoire pour des documents XML non triviaux.
Note latérale: réponses à cette question ignore Stackoverflow.com/Questtions/3705020/... - Deuxième requête retournera des nœuds comme" / foo / acteurs / aléatoire_nodes / acteur "contrairement à celui qui ne renvoie que" Acteur "C'est enfant immédiat d'acteurs".