Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Nettoyage de ressources non managées

Pour la majorité des objets créés par votre application, vous pouvez laisser au récupérateur de mémoire du .NET Framework le soin de gérer les tâches de gestion de mémoire. Lorsque vous créez des objets qui incluent des ressources non managées, vous devez libérer explicitement ces ressources lorsque vous avez fini de les utiliser dans votre application. 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 bases de données. Bien que le récupérateur de mémoire puisse assurer le suivi de 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 les ressources non managées, procédez comme suit :

  • Implémentez le modèle de suppression. Pour ce faire, vous devez fournir une implémentation de IDisposable.Dispose pour activer la version déterministe des ressources non managées. Un consommateur de votre type appelle la méthode Dispose lorsque l'objet (et les ressources qu'il utilise) n'est plus nécessaire. La méthode Dispose libère immédiatement les ressources non managées.

  • Prévoyez que vos ressources non managées soient libérées si un consommateur de votre type oublie d'appeler la méthode Dispose. Il existe deux façons d'effectuer cette opération :

    • Utilisez un handle sécurisé 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 classe System.Runtime.InteropServices.SafeHandle et incluent une méthode Finalize fiable. Lorsque vous utilisez un handle sécurisé, implémentez simplement l'interface IDisposable et appelez la méthode Dispose de votre handle sécurisé dans l'implémentation de IDisposable.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 —

    • Remplacez la méthode Object.Finalize. La finalisation active la version non déterministe des ressources non managées lorsque le consommateur d'un type n'appelle pas la méthode IDisposable.Dispose pour les supprimer de manière déterministe. Toutefois, comme la finalisation de l'objet peut s'avérer être une opération complexe et susceptible d'engendrer des 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 directement votre implémentation de IDisposable.Dispose pour libérer la mémoire utilisée par les 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.

Implémentation d'une méthode Dispose

Explique comment implémenter le modèle de suppression pour libérer les ressources non managées.

Utilisation d'objets implémentant IDisposable

Décrit comment les consommateurs d'un type vérifient que son implémentation de Dispose est appelée. Pour ce faire, nous vous recommandons d'utiliser l'instruction using en C# ou l'instruction Using en Visual Basic.

System.IDisposable

Définit la méthode Dispose pour libérer des ressources non managées.

Object.Finalize

Prévoit la finalisation de l'objet si les ressources non managées ne sont pas libérées par la méthode Dispose.

GC.SuppressFinalize

Supprime la finalisation. Cette méthode est généralement appelée à partir d'une méthode Dispose pour empêcher un finaliseur de s'exécuter.

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft