Welche Puffergröße sollte ich für Lese- / Schreibdateien über POSIX-Fread / Fwrite-Funktionen wählen?
grep
, cp
)
read
/ write
Funktionen oder ANSI / ISO / IEC fread
/ fwrite
Funktionen?
Welche Puffergröße sollte ich für Lese- / Schreibdateien über POSIX-Fread / Fwrite-Funktionen wählen?
grep
, cp
)
read
/ write
Funktionen oder ANSI / ISO / IEC fread
/ fwrite
Funktionen?
Antworten:
Die ANSI / ISO- fread/fwrite
Funktionen sind gepuffert. Der Puffer ist normalerweise 8 KB groß und dies gibt die Granularität unabhängig davon, was Sie in Ihrem Code verwenden. Es kann sinnvoll sein, den Puffer etwas zu erhöhen, möglicherweise auf den folgenden Wert. Für die Massenübertragung sind sie jedoch aufgrund der zusätzlichen Kopien immer etwas langsamer.
Für die POSIX- read/write
Funktionen hängt es vom Betriebssystem und dem Gerät und vielen anderen Dingen ab. Die praktische Erfahrung zeigt jedoch, dass Sie keine Leistungsverbesserung erzielen, wenn Sie den Puffer über zehn KiB hinaus erhöhen. 32 oder 64 KiB sind also ungefähr richtig.
Auf einigen Systemen ist die Abhängigkeit größer als auf anderen. Unter Linux ist der Unterschied normalerweise minimal über 8 KiB (der Standardpuffer ist also in Ordnung), z. B. unter Windows CE (mit nativer API; sie haben kein POSIX) helfen sogar noch mehr als 64 KiB. Dies kann auch vom Gerät abhängen.
fread
, fwrite
) und 32 / 64K für ungepufferte? Gibt es beim Senden von Bilddaten eine bestimmte Begründung für die Auswahl von gepuffert oder ungepuffert?