1. Przegląd
Stworzenie obiektu wymaga dużo zużycia, a obiekt ten może nie być używany podczas uruchomienia, więc aby uniknąć tworzenia go za każdym razem, w grę wchodzi leniwe inicjalizowanie (zwane też leniwą instancją).
Opóźniona inicjalizacja występuje w . NET 4.0, który jest przede wszystkim używany do poprawy wydajności, unikania zbędnych obliczeń oraz zmniejszenia wymagań dotyczących pamięci programu. Można to również nazwać ładunkiem na żądanie.
2. Podstawowa gramatyka
3. Implementuj na przykładach
Zacznij od stworzenia klasy Student z następującym kodem:
Stwórz program konsolowy z następującym kodem:
Po ustawieniu punktu przerwania do debugowania zauważyłem, że po nowości wartość Student's IsValueCreated była fałszywa, a wartość wartości była zerowa
Wtedy, wywołując własność Name, wartość IsValueCreated studenta jest prawdziwa, a wartość wartości nie jest już nullowa
Wynik biegu:
Widać, że Student jest inicjalizowany dopiero wtedy, gdy atrybut Name zostaje wydrukowany, czyli jest inicjalizowany przy pierwszym użyciu, aby osiągnąć cel ograniczenia zużycia.
Ten przykład jest prosty i najbardziej podstawowy <T>sposób używania Lazy. Możemy także użyć<T> funkcji przeciążenia Lazy, Lazy<T> (Func<T>), aby przekazać delegata z wartością zwrotną i ustawić wartość właściwości obiektu inicjalizacji lazy.
Wynik biegu:
Uwaga:<T> Inicjalizacja obiektów Lazy jest domyślnie bezpieczna dla wątków, a w środowisku wielowątkowym pierwszy wątek, który uzyska dostęp<T> do właściwości Wartość obiektu Lazy, inicjuje obiekt Lazy<T>, a kolejne wątki dostępu po raz pierwszy użyją zainicjowanych danych.
4. Scenariusze zastosowań
Jest obiekt, który ma dużo narzutu do stworzenia i program może go nie wykorzystać. Na przykład, załóżmy, że program ładuje kilka instancji obiektów przy starcie, ale tylko kilka instancji musi być wykonanych od razu. Możesz poprawić wydajność uruchamiania programu, opóźniając inicjalizację niepotrzebnych obiektów aż do momentu ich utworzenia.
|