Buffer von std::ifstream
-
Hallo zusammen
Gibt es eine Möglichkeit den Buffer eines Files zu vergrössern, damit das zeichenweise Einlesen mit read() schneller geht? Oder würde das nichts bringen?
Gruss
Stefan
-
http://www.cplusplus.com/reference/iostream/streambuf/pubsetbuf.html
Sogar mit Beispiel.
Aber ich hab keine Ahnung, ob's was bringt.
-
Danke. Scheint nichts zu bringen. Scheinbar sind die Aufrufe von read() der Flaschenhals.
-
Scheinbar? Wie wär's mal mit nem Profiler?

-
Wie gross ist der Puffer, welcher du bei der read-Funktion verwendest? Wenn der nämlich zu klein ist, kann das auch extrem drosseln. Gute Grössen sind meistens zwischen 1024 und 4096, zumindest war das bisher meine Erfahrung beim Bau verschiedener Parser.
Grüssli
-
Dravere schrieb:
Wie gross ist der Puffer, welcher du bei der read-Funktion verwendest? Wenn der nämlich zu klein ist, kann das auch extrem drosseln. Gute Grössen sind meistens zwischen 1024 und 4096, zumindest war das bisher meine Erfahrung beim Bau verschiedener Parser.
Grüssli
So, wie es der TO beschreibt wohl nur ein Zeichen groß.
Wie Dravere bereits andeutete, ist es besser, blockweise die Daten einzulesen, und Dir dann die einzelnen Zeichen aus dem jeweils eingelesenen Block zu picken.
-
Die Lesegeschwindigkeit hängt auch stark von der Streamimplementation ab. Ich hatte auch mal das Problem das Einlesen von großen dateien zu beschleunigen.
Ich hab es erstmal mit reinen C-Funktionen gemacht. Das ging recht schnell.
Dann habe ich diese Geschwindigkeit mit Streams aus RougeWave (BCB5), STLport (BCB6) und Dinkumware (BCB2007) verglichen. Die STLport-Variante war fast genauso schnell wie die C-Variante. Die beiden anderen Streamimplementationen waren bis zu Faktor 3 langsamer.