Finaliser

Définition - Que signifie Finaliser?

Finalize est une méthode objet qui contient le code requis pour libérer des ressources non managées et effectuer des opérations de nettoyage avant le garbage collection (GC).

La méthode finalize est utilisée pour nettoyer les ressources non gérées par .NET. Bien que le framework .NET soit conçu pour libérer des ressources gérées en exécutant implicitement des tâches de gestion de la mémoire, les ressources d'application non gérées, telles que les descripteurs de fichiers et les connexions à la base de données, doivent être explicitement libérées.

Definir Tech explique Finalize

Alors que finalize est conçu pour être appelé implicitement par GC, la méthode dispose peut être explicitement appelée par le code utilisateur pour libérer des ressources.

Finalize est similaire aux destructeurs C ++ traditionnels, car chacun est responsable de la libération des ressources objet. Les destructeurs C ++ sont exécutés immédiatement lorsqu'un objet est hors de portée, tandis que finalize est appelé pendant le nettoyage d'objet au GC. En C #, finalize ne peut pas être directement appelé ou remplacé. Si un destructeur est déclaré, il est converti en méthode finalize lorsque le programme est compilé.

Lors de la finalisation, l'allocation de mémoire ou l'appel de méthodes virtuelles doivent être évités. La portée de finaliser doit être protégée afin qu'elle ne soit accessible que dans la même classe ou sa classe dérivée. Finalize ne doit faire référence à aucun autre objet. En C #, appeler finalize directement sur un objet autre que sa classe de base est une opération non valide. Le code de finalisation doit être minimal sans aucun appel capable de bloquer le thread appelant. Comme finalize est appelé par un thread dédié, son code ne doit pas utiliser le stockage local des threads ou toute technique nécessitant une affinité de thread.

L'utilisation de la finalisation comme mécanisme de secours pour libérer de la mémoire ou des ressources non gérées est essentielle, en raison du manque de déterminisme et des effets sur les performances du GC.

Cette définition a été écrite dans le contexte de .NET