Berapa ukuran buffer yang harus saya pilih untuk membaca / menulis file melalui fungsi POSIX fread / fwrite?
grep
, cp
)
read
/ write
fungsi atau ANSI / ISO / IEC fread
/ fwrite
?
Berapa ukuran buffer yang harus saya pilih untuk membaca / menulis file melalui fungsi POSIX fread / fwrite?
grep
, cp
)
read
/ write
fungsi atau ANSI / ISO / IEC fread
/ fwrite
?
Jawaban:
Fungsi ANSI / ISO fread/fwrite
dilindungi. Buffer biasanya 8 KiB dan itu memberikan granularity independen dari apa yang Anda gunakan dalam kode Anda. Mungkin masuk akal untuk meningkatkan buffer sedikit, mungkin dengan nilai di bawah ini. Untuk transfer massal mereka akan selalu sedikit lebih lambat karena salinan tambahan.
Untuk read/write
fungsi POSIX itu tergantung pada sistem operasi dan perangkat dan banyak hal lainnya, tetapi pengalaman praktis adalah bahwa Anda tidak mendapatkan peningkatan kinerja dengan meningkatkan buffer melebihi puluhan KiB, sehingga 32 atau 64 KiB hampir tepat.
Pada beberapa sistem ketergantungan lebih besar daripada yang lain. Di Linux perbedaan biasanya minimal di atas 8 KiB (jadi buffer default baik-baik saja), misalnya pada Windows CE (menggunakan API asli; mereka tidak memiliki POSIX) bahkan lebih besar dari 64 KiB masih membantu. Mungkin juga tergantung pada perangkat.
fread
, fwrite
) dan 32 / 64K untuk unbuffered? Jika mengirim data gambar apakah ada alasan khusus untuk memilih buffered atau unbuffered?