et le modèle de conception Singleton'/> et le modèle de conception Singleton'/> et le modèle de conception Singleton'/> Qu'est-ce que System.Lazy <T> et le modèle de conception Singleton | abulletproofidea.com

Question Qu'est-ce que System.Lazy et le modèle de conception Singleton


Quelqu'un peut-il m'aider à comprendre l'avantage d'utiliser System.Lazy avec le modèle de conception Singleton.


10
2018-03-10 06:46


origine


Réponses:


La meilleure source sur C # Singletons (couvre également Lazy<>) appartient à Jon Skeet: http://csharpindepth.com/Articles/General/Singleton.aspx

Supposons que vous vouliez avoir une classe qui:

  • représente une ressource unique, il doit donc avoir une instance unique,
  • l'instance nécessite une initialisation coûteuse,
  • les paramètres d'initialisation ne seront disponibles qu'au moment de l'exécution,
  • il y a des cas où vous n'utiliserez pas l'objet après tout,
  • il y a plusieurs threads qui pourraient essayer d'initialiser l'objet singleton simultanément,
  • etc.

Si la plupart des conditions ci-dessus sont vraies, vous devez vous assurer que la classe est Singleton et que l'instance unique est initialisée paresseusement (non initialisée jusqu'à ce que vous en ayez besoin). Si vous ciblez C # 4.0 ou une version ultérieure, utilisez Lazy<> rend votre conception plus simple, plus lisible et plus facile à mémoriser.


15
2018-03-10 07:13



Les docs disent

Utilisez une instance de Lazy (Of T) pour différer la création d'un grand ou   objet gourmand en ressources ou l'exécution d'une ressource intensive   tâche, en particulier lorsque cette création ou exécution peut ne pas se produire   pendant la durée de vie du programme.

Donc, vous créez l'instance singleton uniquement si vous en avez besoin.

L'instanciation paresseuse est généralement utile pour que tous les coûts de création ne soient pas payés lorsque l'application s'initialise - cela peut donner une expérience utilisateur plus agréable.


1
2018-03-10 07:08