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

Auteur: Laura McKinney
Date De Création: 2 Avril 2021
Date De Mise À Jour: 13 Peut 2024
Anonim
Différence entre dispose () et finalize () en C # - La Technologie
Différence entre dispose () et finalize () en C # - La Technologie

Contenu


Les méthodes dispos () 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 disposer() doit être explicitement appelé par l'utilisateur alors que la méthode finaliser() est appelé 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.

  1. Tableau de comparaison
  2. Définition
  3. Différences Clés
  4. Conclusion

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.
action La 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 IDisposable et il est implémenté 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 appelé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 le objet classe. 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.

  1. La méthode dispose () est définie dans une interface IDisposable. Par contre, la méthode finalize () est définie dans la classe objet.
  2. La méthode dispose () doit être appelé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, alors 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 ressources non gérées parce que les ressources gérées sont automatiquement libérées par le ramasse-miettes.
  5. Le spécificateur d'accès de la méthode dispose () est public comme 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 finalize. En outre, il pourrait être appelé à tout moment, en cas de besoin.