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.