Différence entre exécution différée et évaluation paresseuse en C #

Pourriez-vous s’il vous plaît laissez-moi savoir quelle est la déférence exacte entre l’exécution différée et l’évaluation Lazy en C #? Ces deux termes sont utilisés comme synonymes. Quelqu’un pourrait-il expliquer la différence avec un exemple?

En pratique, ils signifient essentiellement la même chose. Cependant, il est préférable d’utiliser le terme différé .

  • Paresseux signifie “ne fais pas le travail avant que tu sois obligé de le faire”.

  • Différé signifie “ne calculez pas le résultat avant que l’appelant l’utilise réellement”.

En pratique, lorsque l’appelant décide d’utiliser le résultat d’une évaluation (c’est-à-dire de commencer à effectuer une itération via un IEnumerable ), c’est précisément le point auquel le “travail” doit être effectué (par exemple, l’envoi d’une requête à la firebase database). ).

Le terme différé est plus spécifique / descriptif quant à ce qui se passe réellement. Quand je dis que je suis paresseux , cela signifie que j’évite de faire un travail inutile ; c’est ambigu quant à ce que cela implique vraiment . Cependant, lorsque je dis que l’exécution / l’évaluation est différée , cela signifie essentiellement que je ne vous donne pas du tout le résultat réel, mais plutôt un ticket que vous pouvez utiliser pour réclamer le résultat . Je diffère le fait de sortir et d’ obtenir ce résultat jusqu’à ce que vous le réclamiez .

Veuillez utiliser le terme différé lorsque vous discutez du sujet en ce qui concerne C #. La paresseux est une version plus vague.

Remarque: L’ exécution / évaluation différée est différente du chargement ou de l’ extraction différée dans le contexte d’une séquence . Le chargement paresseux et le chargement rapide sont des termes utilisés pour décrire la manière dont les éléments d’une séquence sont chargés. Quand une séquence est chargée paresseusement , cela signifie que ce qui la génère effectue juste assez de travail pour charger un élément à la fois . Lorsqu’une séquence est chargée avec impatience , toute la séquence est chargée en une seule fois et stockée dans un tampon local. Des exigences d’utilisation différentes appellent différents modèles de chargement.

En cours d’évaluation différée / paresseuse sont les mêmes.

Les requêtes LINQ utilisent une évaluation paresseuse (ou différée) et ne récupèrent aucune donnée jusqu’à ce que le résultat soit utilisé.

Dans c # L’évaluation différée / différée effectue le même processus, une requête n’est pas exécutée tant qu’elle n’est pas demandée.

Ex:

 DataContext context = new DataContext(); var query = from customer in context.Customers where customer.City == "Delhi" select customer; // Query does not execute here, it wont fetch to database to resortingeve data foreach (var Customer in query) // Query executes here { Console.WriteLine(Customer.Name); } 

Il ne s’exécute que si des exécutions immédiates sont utilisées comme projection / agrégat functions.etc. Ex:

  DataContext context = new DataContext(); var query = (from customer in context.Customers where customer.City == "Delhi" select customer).Count(); // Query execute here 

.Count () qui déclenche et exécute la requête immédiatement.