Maison > développement back-end > C++ > Close() vs Dispose() : quelle méthode devez-vous utiliser pour les objets Stream en C# ?

Close() vs Dispose() : quelle méthode devez-vous utiliser pour les objets Stream en C# ?

Patricia Arquette
Libérer: 2025-01-05 03:25:08
original
137 Les gens l'ont consulté

Close() vs. Dispose(): Which Method Should You Use for Stream Objects in C#?

Élimination appropriée des objets de flux : Close() vs. Dispose()

En programmation, la gestion efficace des ressources telles que les flux est cruciale. Les classes Stream comme Stream, StreamReader et StreamWriter implémentent l'interface IDisposable, présentant deux méthodes pour libérer des ressources : Close() et Dispose(). Cet article vise à clarifier leurs rôles et leurs bonnes pratiques.

Close() vs. Dispose()

La méthode Close() ferme explicitement le flux, tandis que la méthode Dispose () appelle la méthode Dispose(bool), qui gère en interne la libération des ressources. La méthode Close() est héritée de la classe Stream et est implémentée différemment pour chaque type de flux dérivé.

Comment ils fonctionnent

À l'aide du débogueur ou de Reflector.NET, nous pouvons approfondir la mise en œuvre de ces méthodes. Les deux méthodes Close() appellent finalement Dispose(true), ce qui libère des ressources et empêche toute utilisation ultérieure de l'objet.

Bonnes pratiques

Compte tenu de l'équivalence de Close() et Dispose(), le choix se résume à la lisibilité.

  • Utilisation de ( ... ) Bloc :

    • Garantit la libération des ressources quelles que soient les conditions d'erreur, favorisant ainsi la cohérence de la gestion des erreurs.
    • Peut être difficile d'identifier le point de fermeture réel du flux en raison de plusieurs accolades imbriquées.
  • Fermer() et Dispose() Combiné :

    • Ferme explicitement le flux à l'aide de Close() une fois que le bloc using garantit l'achèvement de la fermeture.
    • Clarifie la structure et l'intention du code par rapport à l'utilisation uniquement Close().

Exemple

Dans l'extrait de code fourni, l'utilisation de blocs est utilisée pour garantir une version correcte. Cependant, les méthodes Close() sont également appelées, ce qui n'est pas strictement nécessaire.

using (Stream responseStream = response.GetResponseStream())
{
    using (StreamReader reader = new StreamReader(responseStream))
    {
        using (StreamWriter writer = new StreamWriter(filename))
        {
            // Stream processing...
            writer.Close(); // Explicit close
        }
        reader.Close(); // Explicit close
    }
}
Copier après la connexion

Recommandation

Pour améliorer la lisibilité du code, nous recommandons l'approche suivante :

using (var stream = ...)
{
    /* code */

    stream.Close(); // Explicit close
}
Copier après la connexion

Cette méthode combine la clarté de Close() avec la garantie de libération des ressources du bloc using.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal