Может ли кто-нибудь помочь мне понять преимущества использования System.Lazy с шаблоном проектирования Singleton.
Что такое System.Lazy <T> и шаблон дизайна Singleton
Ответ 1
Лучший источник на С# Singletons (также охватывает Lazy<>
) принадлежит Jon Skeet: http://csharpindepth.com/Articles/General/Singleton.aspx
Предположим, вы хотите иметь класс, который:
- представляет собой уникальный ресурс, поэтому он должен иметь уникальный экземпляр,
- экземпляру требуется дорогостоящая инициализация,
- параметры инициализации будут доступны только во время выполнения,
- Есть случаи, когда вы не будете использовать объект в конце,
- существует несколько потоков, которые могут одновременно инициализировать одноэлементный объект,
- и др.
Если большинство из приведенных выше условий являются истинными, вам необходимо убедиться, что класс Singleton, и уникальный экземпляр лениво инициализирован (не инициализирован до тех пор, пока не будет необходимо). Если вы нацеливаете С# 4.0 или новее, использование Lazy<>
делает ваш дизайн проще, читабельнее и легче запомнить.
Ответ 2
Документы говорят
Используйте экземпляр Lazy (Of T), чтобы отложить создание большого или ресурсоемкий объект или выполнение ресурсоемких задача, особенно когда такое создание или исполнение могут не произойти во время жизни программы.
Итак, вы делаете экземпляр singleton только в том случае, если вам это нужно.
Ленивый экземпляр полезен в целом, так что все затраты на создание не оплачиваются, когда приложение insitialises - может дать более приятный пользовательский интерфейс.