Sobes.tech
Middle

Kādas ir resursu tīrīšanas fāzes atmiņas pārvaldībā?

sobes.tech AI

Atbilde no AI

.NET atmiņas pārvaldība ietver šādus resursu tīrīšanas posmus:

  1. Zīmēšanas posms (Marking): Atkritumu savācējs nosaka, kuri objekti ir pieejami no saknes objektiem (krājuma mainīgie, statiskie mainīgie un reģistri). Nepieejamie objekti tiek atzīmēti savākšanai.

  2. Pārvietošanas posms (Relocating/Compacting): Pieejamie objekti tiek pārvietoti (kompaktēti) atmiņā, atbrīvojot nepārtrauktu telpu un samazinot fragmentāciju. Šajā posmā tiek atjaunināti norādītāji uz pārvietotajiem objektiem. Šis posms ir tikai ārpus fonu būvēm.

  3. Tīrīšanas posms (Sweeping): Objekti, kuri ir atzīmēti savākšanai, ja tie ir definēti, tiek izsaukti Finalize metodi. Pēc tam tiek atbrīvota šajos objektos aizņemtā atmiņa.

Finalize izmantošanas piemērs (nav ieteicams, labāk izmantot IDisposable):

public class ResourceHolder
{
    // Resurss, kas prasa atbrīvošanu
    private System.IO.StreamWriter _writer;

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

    // Beigu metode, ko izsauc atkritumu savācējs
    ~ResourceHolder()
    {
        // Nevadāma resursa atbrīvošana
        _writer?.Dispose();
    }

    // Citas klases metodes...
}