StreamReader und Puffer in C #

8

Ich habe eine Frage zur Pufferbenutzung mit StreamReader. Hier: Ссылка können Sie sehen:

  

"Beim Lesen von einem Stream ist es effizienter, einen Puffer zu verwenden, der die gleiche Größe wie der interne Puffer des Streams hat.".

Laut diesem Weblog ist die interne Puffergröße von a StreamReader ist 2k, also kann ich eine Datei mit einigen Kbs effizient lesen, indem ich Read() unter Vermeidung von Read(Char[], Int32, Int32) benutze.

Darüber hinaus kann ich, selbst wenn eine Datei groß ist, den StreamReader konstruieren, indem ich eine Größe für den Puffer übergebe

Was braucht ein externer Puffer?

    
gravitar 30.06.2010, 09:53
quelle

2 Antworten

4

Wenn Sie sich die Implementierung von StreamReader.Read -Methoden ansehen, sehen Sie, dass beide die interne Methode ReadBuffer aufrufen.

Die Methode

Read() liest zuerst in den internen Puffer und fährt dann nacheinander mit dem Puffer fort.

%Vor%

Read(char[]...) ruft auch ReadBuffer auf, aber stattdessen in den externen Puffer, der vom Aufrufer bereitgestellt wird:

%Vor%

Ich denke, der einzige Leistungsverlust besteht darin, dass Sie Read() viel häufiger aufrufen müssen als Read(char[]) . Da es sich um eine virtuelle Methode handelt, verlangsamen die Aufrufe selbst die Geschwindigkeit.

    
František Žiačik 30.06.2010 10:46
quelle
1

Ich denke diese Frage wurde schon irgendwie anders auf stackoverflow gestellt: Wie schreibe ich den Inhalt eines Streams in einen anderen Stream in .net?

"Wenn Sie die Read-Methode verwenden, ist es effizienter, einen Puffer zu verwenden, der die gleiche Größe wie der interne Puffer des Streams hat, wobei der interne Puffer auf die gewünschte Blockgröße eingestellt ist und immer kleiner als der Wert ist Blockgröße Wenn die Größe des internen Puffers beim Erstellen des Streams nicht angegeben wurde, beträgt seine Standardgröße 4 Kilobyte (4096 Byte). "

    
garzanti 30.06.2010 10:15
quelle