Événement
Créer des applications intelligentes
17 mars, 23 h - 21 mars, 23 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Pour la majorité des objets créés par votre application, vous pouvez laisser au Garbage collector .NET 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. 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.
Dans le cas où un consommateur de votre type oublie d’appeler Dispose, fournissez un moyen de libérer vos ressources non managées. 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 abstraite 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—
Définissez un finaliseur. La finalisation active la mise en production 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.
Avertissement
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 IDisposableIDisposable
Décrit comment les consommateurs d’un type vérifient que son implémentation Dispose est appelée. Pour ce faire, nous vous recommandons fortement d’utiliser using
en C# (ou Using
en Visual Basic).
Type/Membre | Description |
---|---|
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. |
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Événement
Créer des applications intelligentes
17 mars, 23 h - 21 mars, 23 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantFormation
Module
Gérer les implémentations de classes - Training
Découvrez comment implémenter des classes à l’aide de techniques avancées telles que des classes statiques, des classes partielles et des initialiseurs d’objets qui peuvent améliorer la lisibilité, la maintenance et l’organisation de votre code.
Documentation
Implémenter une méthode Dispose - .NET
Dans cet article, découvrez comment implémenter la méthode Dispose, qui libère des ressources non managées utilisées par votre code dans .NET.
Utilisation d’objets implémentant IDisposable - .NET
Découvrez comment utiliser des objets qui implémentent l’interface IDisposable dans .NET. Les types qui utilisent des ressources non managées implémentent IDisposable pour autoriser la récupération des ressources.
Interface System.IDisposable - .NET
Découvrez l’interface System.IDisposable.
Notions de base du garbage collection - .NET
Découvrez comment fonctionne le récupérateur de mémoire et comment le configurer pour optimiser ses performances.