É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 :
Fermer() et Dispose() Combiné :
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 } }
Recommandation
Pour améliorer la lisibilité du code, nous recommandons l'approche suivante :
using (var stream = ...) { /* code */ stream.Close(); // Explicit close }
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!