In this chapter, we discussed various aspects of lazy loading and the data structures provided by .NET Framework to make lazy loading easier to implement.
Lazy loading can significantly improve the performance of applications by reducing memory footprints as well as saving on computing resources by stopping duplicate initialization. We have a choice to either create lazy from scratch using Lazy<T> or avoid complexity by using the static LazyInitializer class. With optimal usage of thread storages and good exception handling logic, these are certainly great tools for developers.
In the next chapter, we will start discussing asynchronous programming approaches available in C#.