Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 24478|Răspunde: 2

[Sursă] Optimizarea performanței C#: Lazy inițializează lazy cu <T>o întârziere

[Copiază linkul]
Postat pe 17.06.2019 16:17:17 | | | |
1. Prezentare generală

Este nevoie de multă consum pentru a crea un obiect, iar acest obiect poate să nu fie folosit în timpul execuției, așa că, pentru a evita crearea obiectului de fiecare dată, intră în joc inițializarea leneșă (numită și instanțiere leneșă).

Inițializarea întârziată are loc în . NET 4.0, care este folosit în principal pentru îmbunătățirea performanței, evitarea calculului irosit și reducerea cerințelor de memorie ale programului. Poate fi numită și încărcare la cerere.

2. Gramatică de bază


3. Implementare cu exemple

Începe prin a crea o clasă pentru elevi cu următorul cod:

Creează un program de consolă cu următorul cod:

După ce am setat punctul de întrerupere pentru depanare, am descoperit că după noutare, valoarea IsValueCreated a lui Student era falsă, iar valoarea valorii era nulă



Atunci, când se apelează proprietatea Nume, valoarea IsValueCreated a studentului este adevărată, iar valoarea valorii nu mai este nulă



Rezultatul run-ului:



Se poate observa că Student este inițializat doar când atributul Name este generat, adică este inițializat când este folosit pentru prima dată, pentru a atinge scopul reducerii consumului.

Acest exemplu este simplu și <T>cea mai simplă metodă de a folosi Lazy. Putem folosi, de asemenea<T>, funcția de suprasarcină a lui Lazy,<T> Lazy (Func<T>), pentru a introduce un delegat cu o valoare de returnare pentru a seta valoarea proprietății obiectului de inițializare lazy (Lazy Initialization).

Rezultatul run-ului:



Notă:<T> Inițializarea obiectelor Lazy este implicit sigură la thread, iar într-un mediu multi-threaded, primul fir care accesează<T> proprietatea Value a obiectului Lazy va inițializa obiectul Lazy<T> obiect, iar firele de acces ulterioare vor folosi datele inițializate pentru prima dată.

4. Scenarii de aplicare

Există un obiect care are mult overhead de creat, iar programul s-ar putea să nu-l folosească. De exemplu, să presupunem că programul tău încarcă mai multe instanțe de obiecte la pornire, dar doar câteva instanțe trebuie executate imediat. Poți îmbunătăți performanța la pornire a programului tău întârziind inițializarea obiectelor inutile până după ce acestea au fost create.






Precedent:Dezvăluie câteva adevăruri despre interviu
Următor:Manual de utilizare pentru instrumentul de testare JCSHELL
Postat pe 18.06.2019 18:18:32 |
Ei bine, am înțeles
 Proprietarul| Postat pe 04.07.2023 19:19:55 |
Cum de leneș în C# păstrează firele în siguranță
https://www.itsvse.com/thread-10621-1-1.html
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com