Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour une majorité des objets créés par votre application, vous pouvez vous appuyer sur le garbage collector .NET pour gérer la gestion de la mémoire. Toutefois, lorsque vous créez des objets qui incluent des ressources non managées, vous devez libérer explicitement ces ressources lorsque vous avez terminé de les utiliser. Les types les plus courants de ressources non managées sont des objets qui encapsulent les ressources du système d’exploitation, telles que les fichiers, les fenêtres, les connexions réseau ou les connexions de base de données. Bien que le garbage collector puisse suivre la durée de vie d’un objet qui encapsule une ressource non managée, il ne sait pas comment libérer et nettoyer la ressource non managée.
Si vos types utilisent des ressources non managées, vous devez effectuer les opérations suivantes :
Implémentez le modèle de suppression. Cela nécessite que vous fournissiez une IDisposable.Dispose implémentation pour permettre la libération déterministe des ressources non managées. Un consommateur de votre type appelle Dispose lorsque l’objet (et les ressources qu’il utilise) n’est plus nécessaire. La Dispose méthode libère immédiatement les ressources non managées.
Dans le cas où un consommateur de votre type oublie d’appeler Dispose, fournissez un moyen pour que vos ressources non managées soient libérées. Il existe deux méthodes pour y parvenir :
Utilisez une poignée sécurisée pour encapsuler votre ressource non managée. Il s’agit de la technique recommandée. Les handles sécurisés sont dérivés de la System.Runtime.InteropServices.SafeHandle classe abstraite et incluent une méthode robuste Finalize . Lorsque vous utilisez un handle sécurisé, implémentez simplement l’interface IDisposable et appelez la méthode de votre handle sécurisé dans l’implémentation Dispose. Le finaliseur du handle sécurisé est appelé automatiquement par le récupérateur de mémoire si sa méthode Dispose n'est pas appelé.
— ou —
Définissez un finaliseur. La finalisation permet la libération non déterministe des ressources non managées lorsque le consommateur d'un type n'appelle pas IDisposable.Dispose pour les libérer de manière déterminée.
Avertissement
La finalisation d’objet peut être une opération complexe et sujette aux erreurs, nous vous recommandons d’utiliser un handle sécurisé au lieu de fournir votre propre finaliseur.
Les consommateurs de votre type peuvent ensuite appeler votre IDisposable.Dispose implémentation directement pour libérer de la mémoire utilisée par des ressources non managées. Lorsque vous implémentez correctement une méthode Dispose, la méthode Finalize de votre handle sécurisé ou votre propre substitution de la méthode Object.Finalize devient un dispositif de protection pour nettoyer les ressources si la méthode Dispose n'est pas appelée.
Dans cette section
L’implémentation d’une méthode Dispose décrit comment implémenter le modèle de suppression pour libérer des ressources non managées.
L'utilisation d’objets implémentant IDisposable
décrit comment les consommateurs d’un type vérifient que son implémentation Dispose est appelée. Nous vous recommandons vivement d’utiliser l’instruction C# using
(ou Visual Basic Using
) pour effectuer cette opération.
Référence
Type / Membre | Descriptif |
---|---|
System.IDisposable | Définit la Dispose méthode permettant de libérer des ressources non managées. |
Object.Finalize | Fournit la finalisation d’objet si les ressources non managées ne sont pas libérées par la Dispose méthode. |
GC.SuppressFinalize | Supprime la finalisation. Cette méthode est généralement appelée à partir d’une Dispose méthode pour empêcher l’exécution d’un finaliseur. |