2012-11-17 16 views
11

Muszę czytać duże pliki w C używając funkcji read. Zastanawiam się tylko, czy nie ma znaczenia, jaki rozmiar bufora utrzymamy pod względem wydajności. Rozmiary plików mogą sięgać nawet kilkudziesięciu GB.optymalny rozmiar bufora do odczytu pliku w C

+0

Oczywiście rozmiar bufora ma znaczenie, ale "optymalny" zależy. –

+0

Im większy, tym lepszy, w granicach rozsądku. I będzie niewielka zaleta korzystania z rozmiaru bufora, który jest potęgą dwóch (lub przynajmniej wielokrotnością 512). –

+0

@HotLicks Czy możesz wyjaśnić, dlaczego '512' –

Odpowiedz

0

Po pierwsze: na pewno wielokrotność logicznego/fizycznego rozmiaru sektora dysku, coś, co można sprawdzić za pomocą hdparm. Jest to ta sama podpowiedź. Podpowiedź: funkcje biblioteki libc mają już pewne dobre buforowanie.

Kolejna wskazówka: jeśli nie potrzebujesz przesyłać strumieniowo całego pliku, ale losowo uzyskać dostęp do jego części, możesz spróbować go pobrać pod adresem mmap().

+0

System operacyjny również robi mnóstwo buforowania nawet z 'open | read | write' (pamięcią podręczną strony + readahead), jeśli nie podano inaczej (' O_DIRECT'/'O_SYNC') – SaveTheRbtz

8

Krótka wersja.
To zależy. Rozmiar bufora x86 4096 bajtów to dobry początek (jeden rozmiar bloku: page size, a także Advanced Format).

Dłuższa wersja.
W systemie UNIX zależy to od jądra, biblioteki libc, systemu plików, sprzętu itp. Nie tylko w przypadku wersji i opcji kompilacji, ale także w czasie przestrajania (np. Wczytać konfigurację z wyprzedzeniem).

Zrób to sam.
Sprawdź to! Patrz: Advanced Programing in UNIX Environment Rozdział 3.9 "Efektywność I/O", aby uzyskać prosty sposób określenia najlepszego rozmiaru bufora do odczytu i zapisu dla jednego konkretnego systemu.

Powiązane problemy