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
Odpowiedz
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()
.
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
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.
- 1. Optymalny rozmiar bufora Androida:
- 2. C# FileStream: Optymalny rozmiar bufora do pisania dużych plików?
- 3. Optymalny rozmiar bufora dla strumienia odpowiedzi HttpWebResponse
- 4. Optymalny rozmiar kafelków tła CSS
- 5. Używanie asynchronizmu C# 5.0 do odczytu pliku
- 6. C++ wydajność odczytu pliku tekstowego
- 7. Czy do stdout dołączono rozmiar bufora?
- 8. iPhone Max rozmiar bufora gniazda
- 9. Utwórz mapę strukturalną PLIKU * do bufora?
- 10. Ustaw optymalny rozmiar okna dialogowego zawierającego TableWidget
- 11. Przycinanie AudioQueue i rozmiar bufora
- 12. Jak obliczyć optymalny rozmiar porcji do przesłania dużych plików?
- 13. Optymalny rozmiar wiersza do pobrania z dużego stołu
- 14. C# dlaczego rozmiar obrazu zwiększy rozmiar pliku
- 15. Zarówno zalecany rozmiar bufora dla gniazda i pliku:
- 16. Automatyczne wybieranie rozmiaru bufora dla pliku I/O
- 17. Zwiększ rozmiar bufora SPI w Raspbian
- 18. C# - Jak zapisać dane bufora IntPtr do pliku (najszybszy sposób)?
- 19. Jak ustawić rozmiar bufora pod Socket UDP? C#
- 20. Rozmiar bufora do przechwytywania pakietów w przestrzeni jądra?
- 21. Aktualizowanie tablicy C podczas odczytu pliku wejściowego
- 22. Golang - Co to jest rozmiar bufora kanału?
- 23. Get duży rozmiar pliku w C
- 24. Jak uzyskać rozmiar pliku w C#?
- 25. Obiekt bufora podobnego do pliku python
- 26. Czy istnieje rozpowszechniona biblioteka C do odczytu par nazw/wartości z pliku?
- 27. Jak zmienić rozmiar bufora i/o jądra
- 28. Linux UDP maksymalny rozmiar bufora odbiorczego
- 29. Czy tylko do odczytu w Objective-C?
- 30. Jak DropdownList tylko do odczytu w C#
Oczywiście rozmiar bufora ma znaczenie, ale "optymalny" zależy. –
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). –
@HotLicks Czy możesz wyjaśnić, dlaczego '512' –