Exécution et évaluation différées dans LINQ to XML
Les opérations de requête et d'axe sont souvent implémentées pour utiliser l'exécution différée. Cette rubrique explique les conditions requises et les avantages de l'exécution différée et certaines considérations relatives à l'implémentation.
Exécution différée
Le terme « exécution différée » signifie que l'évaluation d'une expression est retardée jusqu'à ce que sa valeur réalisée soit requise. L'exécution différée peut améliorer sensiblement les performances lorsque vous devez manipuler de grandes collectes de données, en particulier dans les programmes qui contiennent une série de manipulations ou de requêtes chaînées. Dans le meilleur cas, l'exécution différée autorise une seule itération dans la collection source.
Les technologies LINQ utilisent beaucoup l'exécution différée dans les membres des classes System.Linq principales et dans les méthodes d'extension dans les différents espaces de noms LINQ, tels que System.Xml.Linq.Extensions.
L'exécution différée est prise en charge directement dans le langage C# par le mot-clé yield (sous la forme de l'instruction yield-return) lorsqu'elle est utilisée dans un bloc itérateur. Un tel itérateur doit renvoyer une collection de type IEnumerator ou IEnumerator<T> (ou un type dérivé). Il n'existe aucun équivalent au mot-clé yield dans Visual Basic 9.0 ; par conséquent, l'implémentation de l'exécution différée dans ce langage est plus compliquée.
Évaluation stricte etévaluation différée
Lorsque vous écrivez une méthode qui implémente l'exécution différée, vous devez également décider s'il faut implémenter la méthode à l'aide de l'évaluation différée ou de l'évaluation stricte.
Avec l'évaluation différée, un seul élément de la collection source est traité durant chaque appel à l'itérateur. Il s'agit du mode d'implémentation par défaut des itérateurs.
Avec l'évaluation stricte, le premier appel à l'itérateur entraîne le traitement de l'ensemble de la collection. Une copie temporaire de la collection source peut également être nécessaire. Par exemple, la méthode OrderBy doit trier l'ensemble de la collection avant de renvoyer le premier élément.
L'évaluation différée procure en général de meilleures performances car elle répartit le traitement de surcharge de manière égale durant l'évaluation de la collection et limite l'utilisation des données temporaires. Bien entendu, pour certaines opérations il est impossible d'éviter la matérialisation de résultats intermédiaires.
Étapes suivantes
La rubrique suivante de ce didacticiel illustre l'exécution différée :
Voir aussi
Référence
Concepts
Didacticiel : Chaînage de requêtes