Colectorul de gunoi nu poate asambla obiectul utilizat de aplicație în timp ce codul aplicației interacționează cu acest obiect. Se spune că aplicația are o referință strictă la obiect.
Referințele slabe sunt utile pentru obiectele care utilizează o cantitate mare de memorie, dar pot fi create în mod repetat fără mult efort dacă au fost îndepărtate de colectorul de gunoi.
Să presupunem că în vizualizarea ierarhică a unei aplicații Windows Forms, utilizatorul vede o structură ierarhică ramificată cu diferite soluții. Dacă datele de bază sunt mari în volum, stocarea acestui arbore în memorie este ineficientă, mai ales dacă utilizatorul face altceva în această aplicație.
Dacă utilizatorul trece la o altă parte a aplicației, puteți utiliza clasa WeakReference pentru a crea o referință arbore slabă și a elimina toate referințele stricte. Atunci când utilizatorul va reveni la acest arbore, aplicația va încerca să obțină o referință strictă la arbore și, dacă această operație are succes, evitați să creați din nou arborele.
Pentru a seta o referință slabă la un obiect, trebuie să creați o referință slabă. utilizând o instanță a obiectului pe care doriți să îl urmăriți. Apoi, atribuiți acest obiect proprietății țintă și setați valoarea nulă pentru referința originală la obiect. Pentru un exemplu de cod, consultați descrierea obiectului WeakReference din biblioteca de clasă.
Puteți crea un scurt link slab sau un link slab slab:
Pentru a seta o referință puternică și pentru a reutiliza un obiect, aduceți proprietatea țintă a obiectului WeakReference la tipul de obiect. Dacă proprietatea Target revine null. obiectul a fost eliminat de colector; în caz contrar, puteți continua să utilizați obiectul, deoarece aplicația a restabilit o referință strictă la acest obiect.
Utilizați legături slabe lungi numai atunci când este necesar, deoarece starea obiectului după finalizare este imprevizibilă.
Evitați utilizarea referințelor slabe la obiecte mici, deoarece pointerul însuși poate fi același în volum sau chiar mai mare.
Evitați utilizarea legăturilor slabe ca soluție automată a problemelor legate de gestionarea memoriei. În schimb, dezvoltați o politică eficientă de cache pentru procesarea obiectelor aplicației.