1. Oversigt
Det kræver meget forbrug at skabe et objekt, og dette objekt kan undgås at blive brugt under kørselen, så for at undgå at skabe objektet hver gang, kommer doven initialisering (også kaldet doven instansiering) i spil.
Forsinket initialisering forekommer i . NET 4.0, som primært bruges til at forbedre ydeevnen, undgå spildt beregning og reducere kravene til programhukommelse. Det kan også kaldes on-demand loading.
2. Grundlæggende grammatik
3. Implementér med eksempler
Start med at oprette en Student-klasse med følgende kode:
Opret et konsolprogram med følgende kode:
Efter at have sat breakpunktet for fejlfinding fandt jeg ud af, at efter ny var værdien af Student's IsValueCreated falsk, og værdien af værdien var null
Når man kalder Name-egenskaben, er værdien af elevens IsValueCreated sand, og værdien af værdien er ikke længere null
Løberesultat:
Det kan ses, at Student først initialiseres, når Name-attributten outputtes, altså initialiseres, når den bruges første gang, for at opnå formålet med at reducere forbruget.
Dette eksempel er simpelt og den <T>mest grundlæggende måde at bruge Lazy på. Vi kan også bruge<T> Lazys overload-funktion, Lazy<T> (Func<T>), til at sende en delegeret med en returværdi for at sætte egenskabsværdien for det dovne initialiseringsobjekt.
Løberesultat:
Bemærk:<T> Initialisering af dovne objekter er som standard trådsikker, og i et multitrådet miljø vil den første tråd, der får adgang til<T> dovne objektets Value-egenskab, initialisere<T> dovne objektet, og efterfølgende adgangstråde vil bruge de initialiserede data for første gang.
4. Anvendelsesscenarier
Der er et objekt, der har meget overhead at oprette, og programmet bruger det måske ikke. For eksempel, antag at dit program indlæser flere instanser af objekter ved opstart, men kun få instanser behøver at blive udført med det samme. Du kan forbedre opstartspræstationen af dit program ved at udskyde initialiseringen af unødvendige objekter, indtil de nødvendige objekter er oprettet.
|