Ленивая инициализация объекта означает, что его создание откладывается до его первого использования. (В этом разделе термины «отложенная инициализация» и «отложенная реализация» являются синонимами.) «Ленивая инициализация» в основном используется для повышения производительности, предотвращения расточительных вычислений и снижения требований к памяти программ. Это наиболее распространенные сценарии:
Если у вас есть дорогостоящий объект, и программа может его не использовать. Например, предположим, что у вас в памяти есть объект Customer, у которого есть свойство Orders, которое содержит большой массив объектов Order, для инициализации которого требуется соединение с базой данных. Если пользователь никогда не просит отобразить ордера или использовать данные в вычислениях, то нет причин использовать системную память или вычислительные циклы для его создания. Используя Lazy для объявления объекта Orders для отложенной инициализации, вы можете избежать потери системных ресурсов, когда объект не используется.
Если у вас есть дорогостоящий объект, и вы хотите отложить его создание до завершения других дорогостоящих операций. Например, предположим, что ваша программа загружает несколько экземпляров объекта при запуске, но только некоторые из них требуются немедленно. Вы можете улучшить производительность запуска программы, отложив инициализацию ненужных объектов до тех пор, пока необходимые объекты не будут созданы.
Хотя вы можете написать свой собственный код для выполнения отложенной инициализации, мы рекомендуем использовать вместо него Lazy. Lazy и связанные с ним типы также поддерживают безопасность потоков и обеспечивают согласованную политику распространения исключений.