Exécution différée et évaluation différée (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. Cet article explique les exigences 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 réellement nécessaire. 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 rendement (référence C#) mot clé (sous la forme de l’instruction yield-return ) lorsqu’il est utilisé dans un bloc d’itérateur. Un tel itérateur doit renvoyer une collection de type IEnumerator ou IEnumerator<T> (ou un type dérivé).

Évaluation impatiente par rapport à l’é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é pendant 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.

Consultez Exemple d’exécution différée pour obtenir un exemple d’exécution différée de programmation en C# et Visual Basic.

Voir aussi