StreamReader und Puffer in C#
Ich habe eine Frage über Puffer-Nutzung mit StreamReader.
Hier: http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx Sie sehen können:
"Beim Lesen aus einem Stream, ist es effizienter, verwenden Sie einen Puffer, der die gleiche Größe wie der interne Puffer des Streams.".
Gemäß dieser weblog , die interne Puffergröße, die der StreamReader-2k, so kann ich effizient Lesen einer Datei von einigen Kb mit der Read()
Vermeidung der Read(Char[], Int32, Int32)
.
Außerdem, selbst wenn eine Datei groß ist, kann ich konstruieren, die StreamReader übergeben Sie eine Größe für die Puffer
Also, was ist die Notwendigkeit einer externen Puffer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die Umsetzung der
StreamReader.Read
Methoden, Sie können sehen, dass Sie sowohl call-interneReadBuffer
Methode.Read()
Methode liest zunächst in den internen Puffer, dann weiter auf die Puffer nacheinander.Read(char[]...)
ruft dieReadBuffer
zu, sondern in den externen Puffer bereitgestellt durch Anrufer:Also ich denke, die nur performance-Verlust ist, dass Sie aufrufen müssen
Read()
viel mehr Zeit, alsRead(char[])
und wie es ist eine virtuelle Methode, die nennt sich verlangsamen.Ich denke diese Frage wurde schon gefragt, irgendwie anders auf stackoverflow: Wie schreiben Sie den Inhalt von einem stream in einen anderen stream .net?
", Wenn Sie die Methode Lesen, ist es effizienter, verwenden Sie einen Puffer, der die gleiche Größe wie der interne Puffer des Streams, wo der interne Puffer ist die gewünschte Blockgröße, und immer weniger Lesen als die Blockgröße. Wenn die Größe des internen Puffers wurde nicht spezifiziert, wenn der Strom gebaut wurde, seine Standard-Größe von 4 Kb (4096 bytes)."