Что такое System.Lazy <T>и шаблон проектирования Singleton - PullRequest
10 голосов
/ 10 марта 2012

Может ли кто-нибудь помочь мне понять преимущества использования System.Lazy с Singleton Design Pattern .

Ответы [ 2 ]

15 голосов
/ 10 марта 2012

Лучший источник на C # Singletons (также охватывает Lazy<>) принадлежит Джону Скиту: http://csharpindepth.com/Articles/General/Singleton.aspx

Предположим, вы хотите иметь класс, который:

  • представляетуникальный ресурс, поэтому он должен иметь уникальный экземпляр,
  • экземпляр требует дорогой инициализации,
  • параметры инициализации будут доступны только во время выполнения,
  • тамэто случаи, когда вы не будете использовать объект в конце концов,
  • существует более одного потока, который может попытаться инициализировать одноэлементный объект одновременно,
  • и т. д.

Если большинство вышеперечисленных условий выполняются, вам нужно убедиться, что классом является Singleton, а уникальный экземпляр лениво инициализируется (не инициализируется до тех пор, пока не понадобится). Если вы ориентируетесь на C # 4.0 или более позднюю версию, использование Lazy<> упрощает ваш дизайн, более читаемый и легче запомнить.

1 голос
/ 10 марта 2012

В документах написано

Используйте экземпляр Lazy (Of T), чтобы отложить создание большого или ресурсоемкий объект или выполнение ресурсоемкого задача, особенно когда такое создание или выполнение может не произойти в течение срока действия программы.

Таким образом, вы создаете экземпляр синглтона, только если вам это нужно.

Ленивое создание экземпляров обычно полезно, так как все затраты на создание не оплачиваются при инициализации приложения - это может дать пользователю более приятный опыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...