Sobes.tech
Junior

Kas yra šiukšlių rinkėjas C#?

sobes.tech AI

Atsakymas iš AI

C# kaladėtojas yra automatizuotas atminties valdymo procesas. Jis atlaisvina atmintį, užimamą objektų, kurie daugiau nėra naudojami programoje.

Pagrindiniai aspektai:

  • Automatinis valdymas: Kūrėjas neturi rankiniu būdu skirti ar atlaisvinti atmintį daugumai objektų. CLR (Common Language Runtime) tai daro automatiškai.
  • Nuorodų sekimas: Kaladėtojas nustato, kurie objektai yra pasiekiami iš šakninių šaltinių (pvz., siūlų stogų, statinių laukų). Objektai be nuorodų iš šaltinių laikomi neprieinami ir yra surenkami.
  • Kartos: Heap (krūva) yra padalinta į kartas (0, 1 ir 2). Objektai, kurie "išgyvena" po surinkimo, perkeliami į aukštesnes kartas. Tai optimizuoja procesą, nes dauguma objektų gyvena trumpai.
  • Finalizavimas: Objektai gali turėti Finalize metodą, kurį kaladėtojas iškviečia prieš atlaisvindamas atmintį. Naudojama nevaldomiems ištekliams valyti, tačiau jos naudojimas yra ribotas dėl nenuspėjamo vykdymo laiko.
  • Kompaktiškumas: Po surinkimo kaladėtojas gali perkelti išgyvenusius objektus, kad sumažintų atminties fragmentaciją.
// Pavyzdys, kaip sukurti objektą valdomame krūvoje
MyClass obj = new MyClass();
// Kai daugiau nėra nuorodų į obj, kaladėtojas gali atlaisvinti atmintį

// Pavyzdys, kaip rankiniu būdu atlaisvinti nevaldomus išteklius naudojant IDisposable ir using
// Rekomenduojamas būdas vietoj Finalize
using (var resource = new UnmanagedResourceWrapper())
{
    // Ištekliaus naudojimas
} // Čia kviečiamas resource.Dispose(), išvalomas nevaldomas išteklius