L'initialisation paresseuse d'un objet signifie que sa création est différée jusqu'à sa première utilisation. (Pour ce sujet, les termes initialisation paresseuse et instanciation paresseuse sont synonymes). L'initialisation paresseuse est principalement utilisée pour améliorer les performances, éviter les calculs inutiles et réduire les besoins en mémoire du programme. Il s'agit des scénarios les plus courants :
Lorsque vous avez un objet dont la création est coûteuse, et que le programme risque de ne pas l'utiliser. Par exemple, supposons que vous ayez en mémoire un objet Client dont la propriété Commandes contient un grand tableau d'objets Commandes qui, pour être initialisé, nécessite une connexion à une base de données. Si l'utilisateur ne demande jamais à afficher les commandes ou à utiliser les données dans un calcul, il n'y a aucune raison d'utiliser la mémoire du système ou les cycles de calcul pour les créer. En utilisant Lazy pour déclarer l'objet Orders pour une initialisation paresseuse, vous pouvez éviter de gaspiller des ressources système lorsque l'objet n'est pas utilisé.
Lorsque vous avez un objet dont la création est coûteuse, et que vous voulez reporter sa création jusqu'à ce que d'autres opérations coûteuses aient été effectuées. Par exemple, supposons que votre programme charge plusieurs instances d'objets lorsqu'il démarre, mais que seules certaines d'entre elles sont nécessaires immédiatement. Vous pouvez améliorer les performances de démarrage du programme en reportant l'initialisation des objets qui ne sont pas nécessaires jusqu'à ce que les objets nécessaires aient été créés.
Bien que vous puissiez écrire votre propre code pour effectuer une initialisation paresseuse, nous vous recommandons d'utiliser plutôt Lazy. Lazy et ses types connexes prennent également en charge la sécurité des fils et fournissent une politique cohérente de propagation des exceptions.