Schließen von StreamReader und zugrunde liegendem Stream: ausführliche Erklärung und Best Practices
Wenn Sie in der Programmierung mit Streams arbeiten, verwenden Sie StreamReader
normalerweise, um eine bestimmte Aufgabe auszuführen, beispielsweise das Lesen von Zeilen aus einer Textdatei. Eine häufig gestellte Frage lautet jedoch: Hat die Freigabe des StreamReader
-Objekts Auswirkungen auf das Schließen des zugrunde liegenden Streams?
Antwort: Ja.
Release StreamReader
(sowie StreamWriter
, BinaryReader
und BinaryWriter
) löst das Schließen und Freigeben des zugrunde liegenden Streams aus. Dies geschieht, wenn die Dispose
-Methoden dieser Reader- und Writer-Objekte explizit aufgerufen werden. Diese Klassen geben den Stream jedoch nicht über die Garbage Collection frei. Stellen Sie daher sicher, dass Sie die Lese-/Schreibinstanz manuell mit der using
-Anweisung freigeben, um sicherzustellen, dass der Stream ordnungsgemäß geschlossen wird.
Best Practices:
Um eine konsistente Veröffentlichung des Streams sicherzustellen, wird empfohlen, die using
-Anweisung direkt zu verwenden, um den Stream selbst zu verwalten. Das gewünschte Release-Verhalten kann elegant erreicht werden, indem verschachtelte using
-Anweisungen zum Verwalten von Streams sowie Lesern und Autoren verwendet werden, wie unten gezeigt:
<code class="language-csharp">using (Stream stream = ...) using (StreamReader reader = new StreamReader(stream, Encoding.Whatever)) { // 使用 reader 读取数据 }</code>
Auch wenn die stream
-Anweisung für using
überflüssig erscheinen mag, wird dieser Ansatz angesichts der Ausnahmen, die während der StreamReader
-Instanziierung auftreten können, dringend empfohlen. Dadurch wird sichergestellt, dass der Stream korrekt freigegeben wird, auch wenn das StreamReader
entfernt oder später durch die direkte Verwendung des Streams ersetzt wird.
Das obige ist der detaillierte Inhalt vonSchließt das Entsorgen eines StreamReaders auch den zugrunde liegenden Stream?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!