Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Les implémentations LINQ to Objects des méthodes d’opérateur de requête standard s’exécutent de deux façons principales : immédiate ou différée. Les opérateurs de requête qui utilisent l’exécution différée peuvent également être divisés en deux catégories : la diffusion en continu et la non-diffusion en continu. Si vous savez comment les différents opérateurs de requête s’exécutent, cela peut vous aider à comprendre les résultats que vous obtenez à partir d’une requête donnée. Cela est particulièrement vrai si la source de données change ou si vous créez une requête en plus d’une autre requête. Cette rubrique classifie les opérateurs de requête standard en fonction de leur mode d’exécution.
Modes d’exécution
Immédiat
L’exécution immédiate signifie que la source de données est lue et que l’opération est effectuée au point dans le code où la requête est déclarée. Tous les opérateurs de requête standard qui retournent un résultat unique et non énumérable s’exécutent immédiatement.
Reporté
L’exécution différée signifie que l’opération n’est pas effectuée au point dans le code où la requête est déclarée. L’opération est effectuée uniquement lorsque la variable de requête est énumérée, par exemple à l’aide d’une For Each instruction. Cela signifie que les résultats de l’exécution de la requête dépendent du contenu de la source de données lorsque la requête est exécutée plutôt que lorsque la requête est définie. Si la variable de requête est énumérée plusieurs fois, les résultats peuvent différer à chaque fois. Presque tous les opérateurs de requête standard dont le type de retour est IEnumerable<T> ou IOrderedEnumerable<TElement> s’exécutent de manière différée.
Les opérateurs de requête qui utilisent l’exécution différée peuvent être classés en tant que diffusion en continu ou hors streaming.
Diffusion en continu
Les opérateurs de diffusion en continu n’ont pas besoin de lire toutes les données sources avant de générer des éléments. Au moment de l’exécution, un opérateur de diffusion en continu effectue son opération sur chaque élément source tel qu’il est lu et génère l’élément le cas échéant. Un opérateur de streaming continue de lire les éléments sources jusqu’à ce qu’un élément de résultat puisse être produit. Cela signifie que plusieurs éléments sources peuvent être lus pour produire un élément de résultat.
Non-diffusion en continu
Les opérateurs non de diffusion en continu doivent lire toutes les données sources avant de pouvoir générer un élément de résultat. Les opérations telles que le tri ou le regroupement appartiennent à cette catégorie. Au moment de l’exécution, les opérateurs de requête sans streaming lisent toutes les données sources, les placent dans une structure de données, effectuent l’opération et produisent les éléments résultants.
Classification Table
Le tableau suivant classifie chaque méthode d’opérateur de requête standard en fonction de sa méthode d’exécution.
Remarque
Si un opérateur est marqué dans deux colonnes, deux séquences d’entrée sont impliquées dans l’opération et chaque séquence est évaluée différemment. Dans ces cas, il s’agit toujours de la première séquence de la liste de paramètres évaluée de manière différée et en continu.