Wenn .NET BufferedStream Klasse verwenden?
-
20-08-2019 - |
Frage
Die MSDN-Website heißt es:
Ein Puffer ist ein Block von Bytes im Speicher In den Cache-Daten verwendet wird, wodurch die Anzahl der Anrufe an das Betriebs System. Puffer improve lesen und schreiben Performance. Ein Puffer kann verwendet werden für entweder das Lesen oder Schreiben, aber nie beide gleichzeitig. Das Lesen und Schreiben Methoden der BufferedStream automatisch den Puffer erhalten.
Soll ich diese Klasse in jeder möglichen Gelegenheit?
Lösung
Hier finden Sie einige Texte aus einem Online-Kurs Ich nehme:
Die BufferedStream Klasse ist eine konkrete Klasse, die die Stream-Klasse erweitert und wird verwendet, um eine zusätzliche bereitzustellen Speicherpuffer zu einer anderen Art von Strom, die beide synchron und asynchron. die BufferedStream Klasse muss konfiguriert werden, um entweder lesen oder schreiben, wenn eine Instanz der Klasse wird erstellt, aber die BufferedStream kann nicht so konfiguriert werden, führen sowohl die Aufgaben zur gleichen Zeit.
Microsoft verbessert die Leistung von alle Ströme in .NET Framework durch einschließlich einem eingebauten Puffer. Das Leistung merklich verbessert, indem Anlegen eines BufferedStream an bestehende Ströme, wie beispielsweise ein Filestream oder Memory. Anwenden einer BufferedStream zu einem bestehenden .NET Rahmenstrom führt zu einer Doppel Puffer.
Die häufigste Anwendung der BufferedStream Klasse ist in benutzerdefinierten Stream-Klassen, die nicht enthalten ein Einbau-Puffer.
Andere Tipps
Nach Brad Abrams, so gut wie nie: Link
Nein, es gibt null profitiert von einem BufferedStream Umwickeln eines Datenfluss. Wir kopiert BufferedStream die Pufferlogik in Filestream vor etwa 4 Jahren besser Standard zu fördern Leistung ... In der Tat, ich glaube nicht, gibt es keinen Streams in der .NET Framework, die es erfordern, aber es könnte durch die Gewohnheit benötigt werden Stream-Implementierungen, wenn sie das nicht tun Pufferung standardmäßig aktiviert.
Im besten Fall ich kenne ist, wenn BinaryFormatter serialisieren / deserialisieren direkt von Network. Die Verwendung von BufferedStream Inbetween erhöhen die Leistung verzehnfacht.
Was muss sein in jeder möglichen Gelegenheit verwendet wird, ist der gesunde Menschenverstand. Es hat keinen Zweck, diese Klasse in Verwendung beim Lesen-Schreiben zu von einem Memorystream, aber es könnte sehr nützlich sein, wenn IO-Netzwerk oder Festplatte zu tun (wenn Streams für diese Subsysteme nicht Pufferung tun auf ihrem eigenen).
Die normale Datei-I / O-Streams bereits gepuffert wird durch die Verwendung eines Stream / Stream.
Da Lese- / Schreiboperationen auf Ströme, verwenden Sie normalerweise die Read / Write-Methoden, die ein Byte-Array nehmen, werden Sie natürlich einige selbst Pufferung bieten.
Wenn Sie sehr kleine Arrays verwenden oder Verwendung WriteByte, könnte man eine bessere Leistung erhalten, indem eine BufferedStream dazwischen verwendet wird.