Jaki rozmiar bufora powinienem wybrać dla plików do odczytu / zapisu za pomocą funkcji fread / fwrite POSIX?
grep, cp)
read/ writefunkcje czy ANSI / ISO / IEC fread/ fwritefunkcje?
Jaki rozmiar bufora powinienem wybrać dla plików do odczytu / zapisu za pomocą funkcji fread / fwrite POSIX?
grep, cp)
read/ writefunkcje czy ANSI / ISO / IEC fread/ fwritefunkcje?
Odpowiedzi:
Funkcje ANSI / ISO fread/fwritesą buforowane. Bufor ma zwykle 8 KiB, co daje szczegółowość niezależnie od tego, czego używasz w kodzie. Warto nieco zwiększyć bufor, być może do wartości poniżej. W przypadku przesyłania zbiorczego zawsze będą one nieco wolniejsze ze względu na dodatkowe kopie.
W przypadku read/writefunkcji POSIX zależy to od systemu operacyjnego i urządzenia oraz wielu innych rzeczy, ale praktycznym doświadczeniem jest to, że nie uzyskuje się żadnej poprawy wydajności poprzez zwiększenie bufora ponad dziesiątki KiB, więc 32 lub 64 KiB jest w porządku.
W niektórych systemach zależność jest większa niż w innych. W Linuksie różnica jest zwykle minimalna powyżej 8 KiB (więc domyślny bufor jest w porządku), np. W Windows CE (przy użyciu natywnego API; nie mają POSIX) nawet większa niż 64 KiB nadal pomaga. Może to zależeć również od urządzenia.
fread, fwrite) i 32 / 64K do niebuforowanego? Jeśli wysyłanie danych obrazu ma jakieś uzasadnienie, aby wybrać buforowane lub niebuforowane?