Korrekte Entsorgung von Stream-Objekten: Close() vs. Dispose()
Bei der Programmierung ist die effiziente Verwaltung von Ressourcen wie Streams von entscheidender Bedeutung. Stream-Klassen wie Stream, StreamReader und StreamWriter implementieren die IDisposable-Schnittstelle und bieten zwei Methoden zum Freigeben von Ressourcen: Close() und Dispose(). Dieser Artikel zielt darauf ab, ihre Rollen und Best Practices zu klären.
Close() vs. Dispose()
Die Close()-Methode schließt den Stream explizit, während die Dispose ()-Methode ruft die Dispose(bool)-Methode auf, die intern die Ressourcenfreigabe verarbeitet. Die Close()-Methode wird von der Stream-Klasse geerbt und für jeden abgeleiteten Stream-Typ unterschiedlich implementiert.
Wie sie funktionieren
Mit dem Debugger oder Reflector.NET, Wir können uns mit der Implementierung dieser Methoden befassen. Beide Close()-Methoden rufen schließlich Dispose(true) auf, was Ressourcen freigibt und die weitere Verwendung des Objekts verhindert.
Best Practices
Angesichts der Äquivalenz von Close() und Dispose() kommt es bei der Wahl auf die Lesbarkeit an.
Mit ( ... ) Block:
Close() und Dispose() Kombiniert:
Beispiel
Im bereitgestellten Codeausschnitt werden Verwendungsblöcke verwendet, um eine ordnungsgemäße Freigabe sicherzustellen. Allerdings werden auch Close()-Methoden aufgerufen, was nicht unbedingt notwendig ist.
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 } }
Empfehlung
Um die Lesbarkeit des Codes zu verbessern, empfehlen wir den folgenden Ansatz:
using (var stream = ...) { /* code */ stream.Close(); // Explicit close }
Diese Methode kombiniert die Klarheit von Close() mit der Ressourcenfreigabegarantie des verwendenden Blocks.
Das obige ist der detaillierte Inhalt vonClose() vs. Dispose(): Welche Methode sollten Sie für Stream-Objekte in C# verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!