2012-11-17 22 views
11

Tôi phải đọc các tệp lớn trong C bằng cách sử dụng chức năng read. Tôi chỉ tự hỏi liệu nó có tạo ra sự khác biệt về kích thước bộ đệm mà chúng ta giữ về hiệu suất hay không. Kích thước tệp có thể đạt đến hàng chục GB.kích thước bộ đệm tối ưu để đọc tệp trong C

+0

Tất nhiên kích thước bộ đệm quan trọng, nhưng "tối ưu" phụ thuộc. –

+0

Tài khoản càng lớn càng tốt. Và sẽ có một số lợi thế nhỏ khi sử dụng kích thước bộ đệm là sức mạnh của hai (hoặc ít nhất là bội số của 512). –

+0

@HotLicks bạn có thể giải thích tại sao '512' –

Trả lời

0

Đầu tiên: chắc chắn, một bội số của kích thước sector/vật lý của đĩa, bạn có thể kiểm tra bằng cách sử dụng hdparm. Đây là cùng một số

Gợi ý: các chức năng fopen(3), fread(3), fwrite(3), v.v. của bạn đã thực hiện một số bộ đệm tốt cho bạn.

Một gợi ý khác: nếu bạn không cần truyền toàn bộ tệp, nhưng để truy cập ngẫu nhiên các phần của tệp, bạn có thể thử nhập mmap().

+0

Hệ điều hành cũng thực hiện rất nhiều bộ đệm ngay cả với 'mở | đọc | viết' (trang cache + readahead) nếu không được hướng dẫn khác ('O_DIRECT' /' O_SYNC') – SaveTheRbtz

8

Phiên bản ngắn.
Điều đó tùy thuộc. Kích thước bộ đệm x86 của 4096 byte là một khởi đầu tốt (một page size và cũng là Advanced Format kích thước khối).

Phiên bản dài hơn.
Trong UNIX, nó phụ thuộc vào hạt nhân, libc, hệ thống tệp, phần cứng, v.v. Không chỉ trên các phiên bản và tùy chọn biên dịch mà còn trên các điều chỉnh thời gian chạy (ví dụ: thiết lập đọc trước).

Tự làm.
Kiểm tra! Xem Advanced Programing in UNIX Environment Chương 3.9 "Hiệu quả I/O" cho cách đơn giản để xác định kích thước bộ đệm đọc ghi tốt nhất cho một hệ thống cụ thể.

Các vấn đề liên quan