Sobes.tech
Middle

Care sunt fazele de curățare a resurselor în gestionarea memoriei?

sobes.tech AI

Răspuns de la AI

Gestionarea memoriei în .NET include următoarele faze de curățare a resurselor:

  1. Faza de marcare (Marking): Colectorul de gunoi determină care obiecte sunt accesibile din obiectele rădăcină (variabile de stivă, variabile statice și registre). Obiectele inaccesibile sunt marcate pentru colectare.

  2. Faza de relocare (Relocating/Compacting): Obiectele accesibile sunt mutate (compactate) în memorie, eliberând spațiu continuu și reducând fragmentarea. În timpul acestei faze, se actualizează pointerii către obiectele relocate. Această fază apare doar în compilările diferite de cele în fundal.

  3. Faza de curățare (Sweeping): Metodele finale (Finalize) ale obiectelor marcate pentru colectare sunt apelate, dacă sunt definite. Apoi, memoria ocupată de aceste obiecte este eliberată.

Exemplu de utilizare a Finalize (nu recomandat, mai bine folosiți IDisposable):

public class ResourceHolder
{
    // Resursă care necesită eliberare
    private System.IO.StreamWriter _writer;

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

    // Metodă finalizatoare, apelată de colectorul de gunoi
    ~ResourceHolder()
    {
        // Eliberarea resursei necontrolate
        _writer?.Dispose();
    }

    // Alte metode ale clasei...
}