Lorsque vous travaillez avec des objets Stream tels que Stream, StreamReader et StreamWriter, il est important de considérer l'approche appropriée pour la suppression des objets. Les méthodes Close() et Dispose() sont disponibles, mais la sémantique et les conventions autour de leur utilisation varient.
Méthode Close()
La méthode Close() vide toutes les données mises en mémoire tampon du flux et libère toutes les ressources système qu'elle utilise. Il s'agit d'une opération courante qui permet de garantir l'intégrité des données en forçant des réécritures immédiates.
Méthode Dispose()
La méthode Dispose() suit l'interface IDisposable et est destiné au nettoyage des ressources gérées. Il appelle la méthode protégée Dispose(bool disposing), qui appelle en interne Close() et effectue des tâches de nettoyage supplémentaires telles que la libération des ressources gérées.
Selon le code examiné en utilisant Reflector.NET, les méthodes Close() de StreamReader et StreamWriter appellent en interne Dispose(true). Par conséquent, l'appel de l'une ou l'autre méthode déclenchera à la fois des opérations de vidage et de nettoyage.
Sur la base de la compréhension de Close() et Dispose(), la meilleure pratique recommandée consiste à utiliser les deux méthodes comme suit :
using (var stream = ...) { // Perform operations on the stream stream.Close(); }
Cette approche combine les avantages des deux méthodes :
L'exemple MSDN référencé dans la question utilise Close() sans using(), qui est valide mais obsolète approche. La pratique recommandée décrite ci-dessus améliore la lisibilité et la sécurité du code.
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!