Devo leggere file di grandi dimensioni in C utilizzando la funzione read
. Mi stavo chiedendo se non fa alcuna differenza quale dimensione del buffer manteniamo in termini di prestazioni. Le dimensioni dei file possono raggiungere fino a decine di GB.dimensione buffer ottimale per la lettura di file in C
risposta
Primo: un certo numero di dimensioni del settore logico/fisico del disco, che è possibile verificare utilizzando hdparm. Questo è lo stesso
Suggerimento: il libc fopen(3)
, fread(3)
, fwrite(3)
, ecc funzioni già fanno un buon buffering per voi.
Un altro suggerimento: se non è necessario eseguire lo streaming dell'intero file, ma per accedere in modo casuale a parti di esso, è possibile provare a utilizzare mmap()
.
fa anche molto buffering anche con 'open | read | write' (cache di pagina + readahead) se non diversamente specificato (' O_DIRECT'/'O_SYNC') – SaveTheRbtz
Versione corta.
Dipende. La dimensione del buffer x86 di 4096 byte è un buon inizio (una page size e anche la dimensione del blocco Advanced Format).
Versione più lunga.
In UNIX dipende da kernel, libc, filesystem, hardware, ecc. Non solo su versioni e opzioni di compilazione, ma anche su parametri sintonizzabili di run-time (ad esempio, impostazione read ahead).
Fai da te.
Provalo! Vedi Advanced Programing in UNIX Environment Capitolo 3.9 "I/O Efficiency" per un modo semplice di determinare la migliore dimensione del buffer di lettura/scrittura per un particolare sistema.
- 1. Dimensione del buffer ottimale per il file buffer?
- 2. Streaming file in Delphi - Dimensione buffer ottimale
- 3. Dimensione ottimale del buffer Android
- 4. Selezione automatica della dimensione del buffer per I/O file
- 5. Ricerca della dimensione ottimale per BufferedInputStream in Java
- 6. Qual è la dimensione ottimale per un'app per Android?
- 7. StreamReader e buffer in C#
- 8. Python ftplib Dimensione blocco ottimale?
- 9. Come aprire un file per la lettura in C?
- 10. Libreria per la lettura di file audio
- 11. lettura/scrittura di file bmp in c
- 12. Come ottenere l'output completo previsto quando la dimensione del buffer interno di dimensione expect_out (buffer) supera?
- 13. Dimensione buffer predefinita per un file su Linux
- 14. Lettura file delimitati in C++
- 15. Qual è la dimensione del buffer in BufferedReader?
- 16. buffer di flusso di aggiornamento durante la lettura/proc
- 17. La scrittura di file C++ ofstream utilizza un buffer?
- 18. Qual è la dimensione ottimale: dimensione dell'immagine per la condivisione di un collegamento in Whatsapp (rendering lento dell'immagine)
- 19. Modifica la dimensione del buffer di socket predefinita in Windows
- 20. Lettura file CSV in C#
- 21. C# TextWriter, consentire la lettura dei file:
- 22. La lettura di un file * Csproj in C#
- 23. Disabilitare la modalità malvagia per Nav in Emacs? O qualche buffer di sola lettura?
- 24. Lettura ingresso tastiera senza buffer in Clojure
- 25. Utilizzo di realloc per espandere il buffer durante la lettura dal file si blocca
- 26. C la lettura dei file binari
- 27. Rifilatura AudioQueue e dimensione buffer
- 28. uso ottimale dei BitmapFactory.Options.inSampleSize per la velocità
- 29. Esiste una libreria C diffusa per la lettura di coppie nome/valore da un file?
- 30. Qual è la dimensione del buffer predefinita per StreamWriter
Ovviamente le dimensioni del buffer sono importanti, ma "ottimale" dipende. –
Più grande è, meglio è, a ragione. E ci sarà un piccolo vantaggio nell'usare una dimensione del buffer che è una potenza di due (o almeno un multiplo di 512). –
@HotLicks puoi spiegare perché '512' –