Différence entre disposer et finaliser

Différence entre disposer et finaliser

Dans les langages de programmation, un objet ne peut avoir que variable pendant son existence, après l'instanciation, il ne peut pas être modifié. Ainsi, la même cellule de mémoire ne peut pas être allouée à de nouvelles valeurs, donc une sorte de gestion automatisée de la mémoire est nécessaire pour gérer les espaces inutilisés. Ces espaces inutilisés sont appelés déchets et l'ensemble du processus d'une gestion efficace de la mémoire est appelé collection de déchets.

L'objectif principal d'un collecteur d'ordures est de séparer les objets morts des objets en direct et de récupérer l'espace de réutilisation. Fondamentalement, le tout fonctionne sur le tas géré, qui n'est rien d'autre qu'un bloc de mémoire et le collecteur des ordures vérifie périodiquement la mémoire du tas pour allouer la mémoire à de nouveaux objets. Il existe deux méthodes pour publier des ressources non gérées comme les fichiers et les connexions de base de données: disposer et finaliser.

Cet article vous aide à comprendre la différence entre les deux.

Qu'est-ce qu'une méthode disposée?

Disser est un moyen standard pour les utilisateurs de dire aux objets de libérer leurs ressources et de ne pas essayer d'accéder aux objets. La méthode Disser fournit le contrôle du nettoyage explicite de la mémoire en rendant les objets inutilisables.

Lorsque les utilisateurs appellent la méthode Dispose (), l'objet est censé libérer toutes ses ressources coûteuses, ce qui le rend disponible pour réutiliser. Il n'est jamais appelé par le collecteur des ordures qui ne vient jouer que lorsque la mémoire gérée devient rare. Une interface spéciale appelée «iDisposable» est utilisée pour décider où et comment mettre en œuvre Dispose (). Mais que se passe-t-il lorsque la méthode de disposition n'est pas appelée?

Qu'est-ce qu'une méthode finalisée?

Si la méthode de disposition n'est pas appelée, le plan de secours consiste à utiliser la méthode finaliser () pour le nettoyage. Il est appelé par le collecteur des ordures pour effectuer un nettoyage final des ressources avant de liborer la mémoire. Le concept de nettoyage en temps opportun devient inapplicable ici car plutôt que de désallocation immédiatement la mémoire, l'objet est ajouté à la file d'attente de finalisation pour être détruit plus tard. Finaliser ressemble plus à une sauvegarde mise en place en cas d'erreur de programmation et que la disposition ne nettoie pas les ressources dans lesquelles la méthode finaliser () est appelée par le collecteur des ordures pour supprimer des objets inaccessibles dans la séquence qu'il aime.

Différence entre disposer et finaliser

Bases de disposition et de finalisation

Disser la méthode est appelée pour accélérer la libération de ressources non gérées telles que les poignées de base de données, les poignées de fichiers, les sémaphores et d'autres objets alloués par le système d'exploitation. La méthode Disser est invoquée pour exécuter le code requis pour nettoyer la mémoire inutilisée et les ressources rares comme les poignées GDI. En termes simples, la méthode Disser fournit le contrôle du nettoyage explicite de la mémoire. Finaliser la méthode, en revanche, fait partie de la collecte des ordures utilisée pour effectuer un opération de nettoyage final sur un objet avant d'être collecté. En termes simples, finaliser la méthode est appelée à libérer des ressources non gérées détenues par un objet avant d'être détruite.

Invoquer la disposition et la finalisation

La méthode disposée peut être appelée explicitement par le code utilisateur et la classe qui implémente la méthode pour éliminer les ressources. Cependant, la mémoire ne peut pas être libérée jusqu'à ce que le collecteur des ordures effectue le processus de nettoyage. La méthode peut être appelée même si d'autres références à l'objet existent toujours. La méthode finalisée, au contraire, ne peut être invoquée par le collecteur des ordures qu'après avoir déterminé que la dernière instance d'objet de mémoire est détruite et plus de références à l'objet n'existe. Une fois la méthode finalisée exécutée, l'objet est supprimé de la mémoire du tas.

Mise en œuvre de Disser et de finaliser

Le processus d'élimination d'un objet à partir de la mémoire est appelé motif de dispositif, qui peut être utilisé pour des objets qui accèdent aux ressources non gérées parce que le collecteur des ordures n'est pas en mesure de récupérer des ressources non gérées. L'interface «idisposable» ainsi qu'une méthode de disposition supplémentaire (booléenne) sont implémentées pour demander la publication de ressources non gérées. Une méthode finalisée est exécutée lorsque l'instance d'un objet est détruite avant son désactivation. Il s'agit d'une méthode non déterministe qui se produit à la discrétion du collecteur des ordures et peut même ne pas se produire. Il ne doit pas être mis en œuvre sur des objets gérés jusqu'à extrêmement nécessaire.

Performance de disposer et de finaliser

Il est beaucoup plus rapide d'utiliser une méthode éliminatoire plutôt que de finaliser pour l'élimination instantanée des objets. Les destructeurs sont automatiquement convertis pour finaliser la méthode au moment de l'exécution. Il est automatiquement invoqué par le collecteur des ordures lorsque l'objet sort de la portée, ce qui se produit généralement lorsque l'instance de cet objet est détruite. Le problème avec la méthode Finalise est que c'est un sens non déterministe, il n'est pas certain de récupérer la mémoire qui ne sont plus référencées par la collection des ordures. Cependant, il peut ne pas être libre immédiatement de la mémoire; en fait, il peut ne jamais être appelé et il ne peut pas être forcé explicitement.

Disposer vs. Finaliser: graphique de comparaison

Résumé de Disser vs finaliser

La principale différence entre les méthodes de disposition et de finalisation est que la première est une méthode déterministe qui dissose instantanément des objets lorsqu'ils ne sont plus utilisés, tandis que le second est une méthode non déterministe pour allouer des ressources non gérées, ce qui signifie qu'il s'agit d'une méthode de backstop pour libérer Instances d'objets de mémoire lorsqu'ils sortent de leur portée avant leur affaire. Il est toujours conseillé d'utiliser la méthode de disposition sur finaliser à moins d'être extrêmement nécessaire.

En d'autres termes, Finalize est une sauvegarde mise en place pour nettoyer les ressources non gérées lorsque la méthode de disposition ne peut pas être appelée en cas d'erreur de programmation. Finaliser la méthode est appelée par le collecteur des ordures lorsqu'un objet est sur le point d'être expulsé de la mémoire du tas.