Sobes.tech
Middle

Wat zijn de fasen van het opruimen van bronnen in geheugenbeheer?

sobes.tech AI

Antwoord van AI

Het geheugenbeheer in .NET omvat de volgende fasen van resource-opschoning:

  1. Markeerfase (Marking): De garbage collector bepaalt welke objecten toegankelijk zijn vanaf de root-objecten (stackvariabelen, statische variabelen en registers). Onbereikbare objecten worden gemarkeerd voor verzameling.

  2. Verplaatsingsfase (Relocating/Compacting): Toegankelijke objecten worden verplaatst (gecompacteerd) in het geheugen, waardoor aaneengesloten ruimte vrijkomt en fragmentatie wordt verminderd. Tijdens deze fase worden de pointers naar de verplaatste objecten bijgewerkt. Deze fase is alleen aanwezig in builds die niet op de achtergrond draaien.

  3. Schoonmaakfase (Sweeping): De Finalize-methoden van de gemarkeerde objecten voor verzameling worden aangeroepen, indien gedefinieerd. Vervolgens wordt het geheugen dat door deze objecten werd ingenomen vrijgemaakt.

Voorbeeld van het gebruik van Finalize (niet aanbevolen, gebruik liever IDisposable):

public class ResourceHolder
{
    // Resource die vrijgegeven moet worden
    private System.IO.StreamWriter _writer;

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

    // Finalisatiemethode, aangeroepen door de garbage collector
    ~ResourceHolder()
    {
        // Vrijgeven van niet-beheerde resource
        _writer?.Dispose();
    }

    // Andere methoden van de klasse...
}