1. Översikt
Det krävs mycket förbrukning för att skapa ett objekt, och detta objekt kanske inte används under körningen, så för att undvika att skapa objektet varje gång används lat initialisering (även kallad lat instansiering).
Fördröjd initialisering sker i . NET 4.0, som främst används för att förbättra prestandan, undvika slöseri med beräkningar och minska programminneskraven. Det kan också kallas on-demand-lastning.
2. Grundläggande grammatik
3. Implementera med exempel
Börja med att skapa en studentklass med följande kod:
Skapa ett konsolprogram med följande kod:
Efter att ha satt brytpunkten för felsökning upptäckte jag att efter nytt var värdet i Student's IsValueCreated falskt och värdet på värdet var null
Sedan, när man anropar egenskapen Namn, är värdet av studentens IsValueCreated sant, och värdet av värdet är inte längre null
Resultat av löpning:
Det kan ses att Student initieras endast när attributet Namn matas ut, det vill säga den initieras när den används första gången, för att uppnå syftet att minska förbrukningen.
Detta exempel är enkelt och det <T>mest grundläggande sättet att använda Lazy. Vi kan också använda<T> Lazys överbelastningsfunktion, Lazy<T> (Func<T>), för att skicka in en delegat med ett returvärde för att sätta egenskapsvärdet för Lazy initialiseringsobjektet.
Resultat av löpning:
Observera:<T> Lazy-objekt-initiering är trådsäker som standard, och i en multitrådad miljö kommer den första tråden som får tillgång till<T> Lazy-objektets egenskap Value att initiera<T> Lazy-objektet, och efterföljande åtkomsttrådar kommer att använda den initialiserade datan för första gången.
4. Tillämpningsscenarier
Det finns ett objekt som har mycket överhead att skapa, och programmet kanske inte använder det. Till exempel, anta att ditt program laddar flera instanser av objekt vid uppstart, men att bara några instanser behöver köras omedelbart. Du kan förbättra programmets uppstartsprestanda genom att skjuta upp initialiseringen av onödiga objekt tills de nödvändiga objekten har skapats.
|