Hallo Welt
Wiedereinmal bin ich in den Wirrungen meiner Gedanken auf eine grundsätzliche Frage gestossen:
Ist es besser, mit fread() kleine Grössen zu lesen, oder ist es besser, den ganzen Array direkt zu füllen?
Prämissen:
Der Gedanke: fread() blockt solange, bis alle Daten gelesen sind. Nun haben gerade herkömmliche Festplatten eine lange Antwortzeit, die sich da wieder auf die Geschwindigkeit des Programms auswirkt.
Konkret:
Ist bei einer arraysize von 5'000'000 (5MB) das
oder
besser?
Ich freue mich auf alle Anregungen!
Gruss
cwriter
Wiedereinmal bin ich in den Wirrungen meiner Gedanken auf eine grundsätzliche Frage gestossen:
Ist es besser, mit fread() kleine Grössen zu lesen, oder ist es besser, den ganzen Array direkt zu füllen?
Prämissen:
- Die Daten werden schon im Lesevorgang verarbeitet, d.h.: Per Multithreading wird im einen Thread gelesen, im anderen werden die gelesenen Daten (aber nie die noch nicht gelesenen Daten - logischerweise ;-) ) verarbeitet.
- Dazu ist der Array im Speicher schon komplett alloziert.
- Die Grösse der zu lesenden Dateien sollte variabel sein, nie aber eine Grösse von 32bit überschreiten (~3.5 GB).
Der Gedanke: fread() blockt solange, bis alle Daten gelesen sind. Nun haben gerade herkömmliche Festplatten eine lange Antwortzeit, die sich da wieder auf die Geschwindigkeit des Programms auswirkt.
Konkret:
Ist bei einer arraysize von 5'000'000 (5MB) das
C:
fread(arr, 1, arraysize, f);
C:
for(int i = 0;i<1000;i++)
fread(arr+(i*5000), 1, 5000, f);
Ich freue mich auf alle Anregungen!
Gruss
cwriter