Recommandé, 2024

Choix De L'Éditeur

Différence entre dispose () et finalize () en C #

Les méthodes disposent () et finalize () sont les méthodes de C # qui sont appelées pour libérer les ressources non managées détenues par un objet. La méthode dispose () est définie dans l'interface IDisposable alors que la méthode finalize () est définie dans l'objet class. La principale différence entre dispose () et finalize () est que la méthode dispose () doit être explicitement invoquée par l'utilisateur, tandis que la méthode finalize () est appelée par le ramasse-miettes, juste avant la destruction de l'objet. Étudions d’autres différences entre elles à l’aide du tableau comparatif présenté ci-dessous.

Tableau de comparaison

Base de comparaisondisposer( )finaliser ()
DéfiniLa méthode dispose () est définie dans l'interface IDisposable.La méthode finalize () id définie dans la classe java.lang.object.
Syntaxepublic void Dispose () {
// Dispose le code ici
}
void protected finalize () {
// code de finalisation ici
}
InvoquéLa méthode dispose () est appelée par l'utilisateur.La méthode finalize () est appelée par le ramasse-miettes.
ObjectifLa méthode dispose () est utilisée pour libérer des ressources non gérées chaque fois qu'elle est invoquée.Method finalize () est utilisé pour libérer des ressources non gérées avant que l'objet ne soit détruit.
la mise en oeuvreLa méthode dispose () doit être implémentée chaque fois qu'il existe une méthode close ().La méthode finalize () doit être implémentée pour les ressources non gérées.
Spécificateur d'accèsLa méthode dispose () est déclarée publique.La méthode finalize () est déclarée privée.
actionLa méthode dispose () est plus rapide et élimine instantanément un objet.La méthode de finalisation est plus lente que celle de disposer
PerformanceLa méthode dispose () effectue l'action instantanée, par conséquent, n'affecte pas la performance des sites Web.La méthode finalize () étant plus lente, affecte les performances des sites Web.

Définition de dispose ()

La méthode dispose () libère les ressources non gérées détenues par un objet de la classe. Les ressources non gérées sont des fichiers, des connexions de données, etc. La méthode dispose () est déclarée dans l'interface IDisposeable et elle est implémentée par la classe en implémentant l'interface IDisposable. Cette méthode n'est pas appelée automatiquement. Le programmeur doit l'implémenter manuellement lorsque vous créez une classe personnalisée qui sera utilisée par d'autres. La méthode a la syntaxe suivante:

 public void dispose () {// Dispose le code ici} 

Dans la syntaxe ci-dessus, vous pouvez constater que la méthode est déclarée comme publique. C'est parce que cette méthode est définie dans l'interface IDisposable et qu'elle doit être implémentée par la classe qui implémente cette interface. Ainsi, pour fournir l'accessibilité à la classe d'implémentation, la méthode est déclarée comme publique.

Cette méthode est invoquée manuellement par le code d'un programme tel qu'il est implémenté pour l'invoquer. La performance des méthodes est rapide et libère instantanément les ressources détenues par l'objet d'une classe.

Définition de finalize ()

La méthode finalize () est définie dans la classe d' objet . Il est utilisé pour les activités de nettoyage. Cette méthode est appelée par le ramasse-miettes lorsque la référence d'un objet n'est pas utilisée pendant une longue période. Garbage Collector libère automatiquement les ressources gérées, mais si vous souhaitez libérer les ressources non gérées, telles que le descripteur de fichier, la connexion de données, etc., la méthode de finalisation doit être implémentée manuellement. Le ramasse-miettes appelle la méthode finalize () juste avant la destruction complète de l'objet.

La syntaxe de la méthode finalize ():

 protected void finalize () {// code de finalisation ici} 

Dans la syntaxe ci-dessus, la méthode finalize () est déclarée protégée. La raison en est que la méthode finalize () ne doit pas être accessible de l’extérieur de la classe et qu’elle ne doit être accessible que par le ramasse-miettes.

La méthode finalize () affecte le coût de la performance car elle ne libère pas la mémoire instantanément. En C #, la méthode finalize est appelée automatiquement avec les destructeurs.

Principales différences entre dispose () et finalize ()

  1. La méthode dispose () est définie dans une interface IDisposable . D'autre part, la méthode finalize () est définie dans l' objet de classe.
  2. La méthode dispose () doit être invoquée manuellement dans le code par un programmeur, tandis que la méthode finalize est automatiquement invoquée par le garbage collector avant la destruction de l'objet.
  3. La méthode dispose peut être appelée à tout moment, tandis que la méthode finalize est appelée par le ramasse-miettes lorsqu'il constate que cet objet n'a pas été référencé depuis longtemps.
  4. La méthode dispose () est implémentée dans une classe après avoir implémenté l'interface IDisposable. La méthode finalize () doit être implémentée uniquement pour les ressources non gérées, car celles-ci sont automatiquement libérées par le garbage collector.
  5. Le spécificateur d'accès de la méthode dispose () est public tel qu'il est défini dans l'interface IDisposable et il serait implémenté par la classe qui implémente cette interface, elle devrait donc être publique. D'autre part, la méthode finalize () a un spécificateur d'accès protégé afin qu'il ne soit accessible à aucun membre en dehors de la classe.
  6. La méthode dispose () est rapide et libère l’objet instantanément, elle n’affecte donc pas le coût de performance. La méthode finalize () est plus lente et ne libère pas instantanément les ressources détenues par l'objet.

Conclusion:

Il est suggéré d'utiliser la méthode dispose () sur la méthode finalize () car elle est plus rapide que finaliser. En outre, il pourrait être appelé à tout moment, en cas de besoin.

Top