Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
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
L’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 requise. L’exécution différée peut considérablement améliorer les performances lorsque vous devez manipuler des collections de données volumineuses, en particulier dans les programmes qui contiennent une série de requêtes chaînées ou de manipulations. Dans le meilleur cas, l’exécution différée n’active qu’une seule itération via la collection source.
Les technologies LINQ utilisent largement l’exécution différée dans les membres des classes principales System.Linq 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 (référence C#) ( sous la forme de l’instruction yield-return ) lorsqu’il est utilisé dans un bloc d’itérateur. Un tel itérateur doit retourner une collection de type IEnumerator ou IEnumerator<T> (ou un type dérivé).
Évaluation différée 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 d’une évaluation différée ou d’une évaluation impatiente.
- Dans l’évaluation différée, un seul élément de la collection source est traité pendant chaque appel à l’itérateur. Il s’agit de la façon classique dont les itérateurs sont implémentés.
- En évaluation impatiente, le premier appel à l’itérateur entraîne le traitement de l’intégralité de la collection. Une copie temporaire de la collection source peut également être nécessaire. Par exemple, la OrderBy méthode doit trier toute la collection avant de renvoyer le premier élément.
L’évaluation différée génère généralement de meilleures performances, car elle distribue uniformément le traitement des surcharges tout au long de l’évaluation de la collection et réduit l’utilisation des données temporaires. Bien sûr, pour certaines opérations, il n’existe aucune autre option que de matérialiser les résultats intermédiaires.
Consultez l’exemple d’exécution différée pour obtenir un exemple d’exécution différée de programmation en C# et Visual Basic.