2010-03-27 2 views
9

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 paresseuse en C#? Ces deux sont utilisés comme synonymes.Peut-on expliquer la différence avec un exemple ??Différence entre l'exécution différée et l'évaluation paresseuse en C#

+2

Dupliquer, par un utilisateur portant le même nom de http://stackoverflow.com/questions/2515796/2515920 –

+0

Jetez un coup d'œil au blog de Jon Skeets sur le sujet: [http://msmvps.com/blogs/jon_skeet /archive/2010/03/25/just-how-lazy-are-you.aspx](http://msmvps.com/blogs/jon_skeet/archive/2010/03/25/just-how-lazy-are- toi.aspx) – Jan

+0

Très bien, vous gagnez. Lent/me paresseux :) – Jan

Répondre

20

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

  • Lazy signifie "ne pas faire le travail jusqu'à ce que vous devez absolument."

  • différés signifie « ne pas calculer le résultat jusqu'à ce que l'appelant utilise réellement. »

Dans la pratique, lorsque l'appelant décide d'utiliser le résultat d'une évaluation (premier itérer un IEnumerable<T>), qui est précisément le point où le « travail » doit être fait (comme la délivrance une requête à la base de données).

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 je éviter de faire un travail inutile; il est ambigu quant à ce que implique réellement. Cependant, quand je dis que l'exécution/évaluation est différé, cela signifie essentiellement que je ne vous donne pas le résultat réel du tout, mais plutôt un ticket que vous pouvez utiliser pour réclamer le résultat. I différer réellement sortir et obtenir ce résultat jusqu'à ce que vous réclamer il.

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

Note: Lazy exécution/évaluation est différent du paresseux chargement ou aller chercher dans le contexte d'une séquence . chargement paresseux et chargement hâtif sont des termes utilisés pour décrire comment les éléments d'une séquence sont chargés. Quand une séquence est chargée paresseusement, cela signifie que tout ce qui génère la séquence fait juste assez de travail pour charger un élément à la fois. Lorsqu'une séquence est chargée avec impatience chargée, la séquence entière est chargée en une fois et stockée dans un tampon local. Différentes exigences d'utilisation appellent des modèles de chargement différents.

+0

Cher Aaronaught, Merci beaucoup pour votre explication élaborée et excellente ... –

+0

Si quelqu'un a besoin d'un code pour voir comment ces deux fonctionnent, je prépare Console App qui montre la différence entre eux: https://github.com/jakubmaguza/Lazy-vs-Deferred-vs-Normal/blob/master/src/Main.cs – titol

Questions connexes