Sobes.tech
Middle

Jaké jsou fáze čištění zdrojů v řízení paměti?

sobes.tech AI

Odpověď od AI

Správa paměti v .NET zahrnuje následující fáze čištění zdrojů:

  1. Fáze označování (Marking): Sběrač odpadků určuje, které objekty jsou dostupné z kořenových objektů (proměnné zásobníku, statické proměnné a registry). Nedostupné objekty jsou označeny k odstranění.

  2. Fáze přesunu (Relocating/Compacting): Přístupné objekty jsou přesouvány (kompaktně uloženy) v paměti, čímž se uvolní souvislý prostor a sníží fragmentace. Během této fáze jsou aktualizovány ukazatele na přesunuté objekty. Tato fáze je přítomna pouze v sestaveních mimo režim pozadí.

  3. Fáze úklidu (Sweeping): Volají se metody Finalize objektů označených k odstranění, pokud jsou definovány. Poté je uvolněna paměť obsazená těmito objekty.

Příklad použití Finalize (nedoporučuje se, je lepší používat IDisposable):

public class ResourceHolder
{
    // Zdroj, který je třeba uvolnit
    private System.IO.StreamWriter _writer;

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

    // Metoda finalizace, volaná garbage collectorem
    ~ResourceHolder()
    {
        // Uvolnění neřízeného zdroje
        _writer?.Dispose();
    }

    // Další metody třídy...
}