Fermeture de StreamReader et du flux sous-jacent : explication détaillée et bonnes pratiques
Lorsque vous travaillez avec des flux en programmation, vous utilisez généralement StreamReader
pour effectuer une tâche spécifique, telle que lire des lignes à partir d'un fichier texte. Cependant, une question courante est la suivante : la libération de l'objet StreamReader
affecte-t-elle la fermeture du flux sous-jacent ?
Réponse : Oui.
Release StreamReader
(ainsi que StreamWriter
, BinaryReader
et BinaryWriter
) déclenche la fermeture et la libération du flux sous-jacent. Cela se produit lorsque les méthodes Dispose
de ces objets lecteur et écrivain sont explicitement appelées. Cependant, ces classes ne libèrent pas le flux via le garbage collection. Par conséquent, assurez-vous de libérer manuellement l'instance de lecture/écriture à l'aide de l'instruction using
pour vous assurer que le flux est correctement fermé.
Bonnes pratiques :
Pour garantir une diffusion cohérente du flux, il est recommandé d'utiliser directement l'instruction using
pour gérer le flux lui-même. Le comportement de publication souhaité peut être obtenu avec élégance en utilisant des instructions using
imbriquées pour gérer les flux, les lecteurs et les écrivains, comme indiqué ci-dessous :
<code class="language-csharp">using (Stream stream = ...) using (StreamReader reader = new StreamReader(stream, Encoding.Whatever)) { // 使用 reader 读取数据 }</code>
Même si l'instruction stream
pour using
peut sembler redondante, cette approche est fortement recommandée compte tenu des exceptions qui peuvent survenir lors de l'instanciation de StreamReader
. Cela garantit que le flux est publié correctement même si le StreamReader
est supprimé ou remplacé ultérieurement en utilisant directement le flux.
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!