Quelles sont les phases de nettoyage des ressources dans la gestion de la mémoire?
sobes.tech IA
Réponse de l'IA
La gestion de la mémoire en .NET comprend les phases suivantes de nettoyage des ressources :
-
Phase de marquage (Marking) : Le ramasse-miettes détermine quels objets sont accessibles à partir des objets racine (variables de pile, variables statiques et registres). Les objets inaccessibles sont marqués pour la collecte.
-
Phase de déplacement (Relocating/Compacting) : Les objets accessibles sont déplacés (compactés) en mémoire, libérant un espace contigu et réduisant la fragmentation. Les pointeurs vers les objets déplacés sont mis à jour. Cette phase n'est présente que dans les compilations autres que en arrière-plan.
-
Phase de nettoyage (Sweeping) : Les méthodes finales (
Finalize) des objets marqués pour la collecte sont appelées, si elles sont définies. Ensuite, la mémoire occupée par ces objets est libérée.
Exemple d'utilisation de Finalize (non recommandé, il vaut mieux utiliser IDisposable) :
public class ResourceHolder
{
// Ressource nécessitant une libération
private System.IO.StreamWriter _writer;
public ResourceHolder(string filePath)
{
_writer = new System.IO.StreamWriter(filePath);
}
// Méthode finale, appelée par le ramasse-miettes
~ResourceHolder()
{
// Libérer la ressource non gérée
_writer?.Dispose();
}
// Autres méthodes de la classe...
}