Initialisation et suppression des composants

Mise à jour : novembre 2007

Votre composant est initialisé par son constructeur SubNew en Visual Basic) et supprimé par son destructeur (SubFinalizeen Visual Basic). Le constructeur de votre composant est appelé lorsqu'une instance est créée ; passé ce moment, il ne peut plus être appelé. Le destructeur est appelé juste avant que votre composant ne soit détruit par l'opération garbage collection et sa mémoire libérée.

Remarque pour Visual Basic :

Dans les versions antérieures de Visual Basic, les événements Initialize et Terminate remplissaient les fonctions désormais dévolues respectivement au constructeur et au destructeur.

Attente de l'opération garbage collection

Quand le garbage collection a déterminé que le composant ne peut plus être atteint par aucun code d'exécution, le Common Language Runtime appelle votre destructeur de composant. Cela arrive quand toutes les références au composant ont été libérées ou si les seules références à votre composant sont contenues dans des objets isolés de tout code d'exécution, par exemple dans le cas des références circulaires.

Parce qu'il peut se passer un certain temps entre le moment où l'utilisateur a fini de se servir de votre composant et celui où le destructeur est appelé, une étape supplémentaire est introduite dans la durée de vie des composants .NET Framework : si votre composant acquiert des ressources système, telles que des connexions à une base de données ou des handles vers des objets système Windows, vous devez implémenter l'interface IDisposable et fournir une méthode Dispose de sorte que les utilisateurs de votre composant puissent choisir le moment auquel ils libèreront ces ressources.

Cycle de vie d'un composant

Initialisation du type : Lorsque la première instance de votre composant est créée, le premier code à s'exécuter est un code d'initialisation partagé. Une référence à un membre partagé provoque également l'exécution du constructeur partagé. Cela inclut tous les champs partagés (variables de membre) initialisées, ainsi que le constructeur partagé (SharedSubNew) s'il existe. Dans le code suivant, une police de référence est créée pour la classe tout entière.

Remarque :

Le mot clé C# qui correspond à Shared est static qui ne doit pas être confondu avec le mot clé Static dans Visual Basic.

Quand implémenter une méthode Dispose ?

Si votre composant hérite de Component, une implémentation par défaut de Dispose est fournie. Cette implémentation peut être substituée par un code de nettoyage personnalisé. Si vous constituez votre composant en créant une implémentation personnalisée de IComponent, vous devez implémenter IDisposable afin de fournir une méthode Dispose pour votre composant.

Votre composant a besoin d'une méthode Dispose s'il alloue des objets système, des connexions à la base de données et d'autres ressources rares qui doivent être libérées dès qu'un utilisateur a fini de se servir d'un composant.

Vous devez également implémenter une méthode Dispose si votre composant contient des références à d'autres objets possédant des méthodes Dispose.

Pourquoi implémenter la méthode Dispose ?

Selon l'activité du système, un intervalle d'une durée imprévisible peut s'écouler entre le moment où un utilisateur a fini de se servir d'un composant et celui où l'opération garbage collection détecte que le code du composant n'est plus accessible. Si vous ne fournissez pas de méthode Dispose, votre composant stockera ses ressources pendant cet intervalle.

Pire cas de figure

Imaginez qu'un composant serveur ne possédant pas de méthode Dispose utilise une connexion à une base de données. Si le serveur dispose d'une mémoire importante, vous pouvez créer et libérer de très nombreuses instances du composant sans impact réel sur la taille de l'espace libre. Dans un tel cas, l'opération garbage collection peut détruire les composants longtemps après que les références à ces composants ont été libérées.

En fin de compte, toutes les connexions de base de données disponibles pourraient se trouver occupées par des composants libérés mais pas encore détruits. Bien qu'il n'y ait pas pénurie de mémoire sur le serveur, celui-ci pourrait se trouver dans l'incapacité de répondre aux demandes des utilisateurs.

Voir aussi

Tâches

Comment : créer et configurer des composants en mode design

Concepts

Caractéristiques de la classe de composants

Modifications des instances de composants dans Visual Basic

Référence

Dispose

Finalize