Tôi nên chọn kích thước bộ đệm nào cho các tệp đọc / ghi thông qua các hàm POSIX fread / fwrite?
grep
, cp
)
read
/ write
chức năng hoặc chức năng ANSI / ISO / IEC fread
/ fwrite
?
Tôi nên chọn kích thước bộ đệm nào cho các tệp đọc / ghi thông qua các hàm POSIX fread / fwrite?
grep
, cp
)
read
/ write
chức năng hoặc chức năng ANSI / ISO / IEC fread
/ fwrite
?
Câu trả lời:
Các fread/fwrite
chức năng ANSI / ISO được đệm. Bộ đệm thường là 8 KiB và điều đó mang lại độ chi tiết độc lập với những gì bạn sử dụng trong mã của mình. Có thể có ý nghĩa để tăng bộ đệm một chút, có lẽ với giá trị bên dưới. Đối với chuyển số lượng lớn, chúng sẽ luôn chậm hơn một chút do có thêm các bản sao.
Đối với các read/write
chức năng POSIX, nó phụ thuộc vào hệ điều hành và thiết bị và nhiều thứ khác, nhưng kinh nghiệm thực tế là bạn không nhận được bất kỳ cải thiện hiệu suất nào bằng cách tăng bộ đệm vượt quá hàng chục KiB, vì vậy 32 hoặc 64 KiB là đúng.
Trên một số hệ thống, sự phụ thuộc lớn hơn so với các hệ thống khác. Trên Linux, sự khác biệt thường tối thiểu trên 8 KiB (vì vậy bộ đệm mặc định vẫn ổn), ví dụ như trên Windows CE (sử dụng API gốc; chúng không có POSIX) thậm chí còn lớn hơn 64 KiB. Nó cũng có thể phụ thuộc vào thiết bị.
fread
, fwrite
) và 32 / 64K cho unbuffered? Nếu gửi dữ liệu hình ảnh, có bất kỳ lý do cụ thể để chọn bộ đệm hoặc không có bộ đệm?