Sobes.tech
Middle

Aké sú fázy čistenia zdrojov v správe pamäte?

sobes.tech AI

Odpoveď od AI

Správa pamäte v .NET zahŕňa nasledujúce fázy čistenia zdrojov:

  1. Fáza označovania (Marking): Zberač odpadu určuje, ktoré objekty sú dostupné z koreňových objektov (premenné zásobníka, statické premenné a registre). Nedostupné objekty sú označené na zbierku.

  2. Fáza presunu (Relocating/Compacting): Dostupné objekty sa presúvajú (konsolidujú) v pamäti, čím sa uvoľní súvislý priestor a zníži fragmentácia. Počas tejto fázy sa aktualizujú ukazovatele na presunuté objekty. Táto fáza je prítomná iba v zostavách mimo režimu na pozadí.

  3. Fáza upratovania (Sweeping): Metódy Finalize objektov označených na zbierku sa volajú, ak sú definované. Následne sa uvoľní pamäť obsadená týmito objektmi.

Príklad použitia Finalize (neodporúča sa, je lepšie používať IDisposable):

public class ResourceHolder
{
    // Zdroj, ktorý vyžaduje uvoľnenie
    private System.IO.StreamWriter _writer;

    public ResourceHolder(string filePath)
    {
        _writer = new System.IO.StreamWriter(filePath);
    }

    // Metóda finalizácie, volaná garbage collectorem
    ~ResourceHolder()
    {
        // Uvoľnenie neovládaného zdroja
        _writer?.Dispose();
    }

    // Iné metódy triedy...
}