2009-03-13 6 views

Trả lời

2

Bạn sẽ cần mã phức tạp hơn để thiết lập ánh xạ tệp hơn là chỉ mở và đọc. Ánh xạ tệp được thiết kế để truy cập ngẫu nhiên vào một phần của tệp. Nếu bạn không cần điều đó, chỉ cần không bận tâm với lập bản đồ tập tin.

Ngoài ra nếu cần chuyển mã của bạn sang nền tảng khác, bạn sẽ làm điều đó dễ dàng hơn và nhanh hơn nếu bạn không sử dụng ánh xạ tệp.

13

Với ReadFile/WriteFile bạn có lỗi ngữ nghĩa xử lý xác định. Khi bạn sử dụng các tệp ánh xạ bộ nhớ, lỗi được trả lại bằng cách ném một ngoại lệ.

Ngoài ra, nếu tệp ánh xạ bộ nhớ phải nhấn vào đĩa (hoặc thậm chí tệ hơn, mạng), bộ nhớ của bạn có thể mất vài giây (hoặc thậm chí là vài phút) để hoàn thành. Tùy thuộc vào ứng dụng của bạn, điều này có thể gây ra các quầy hàng không mong muốn.

Nếu bạn sử dụng ReadFile/WriteFile, bạn có thể sử dụng các biến thể không đồng bộ của API để cho phép bạn kiểm soát hành vi này. Bạn cũng có hiệu suất xác định hơn nếu bạn sử dụng ReadFile, đặc biệt nếu mẫu I/O của bạn có thể dự đoán được - I/O được ánh xạ thường là ngẫu nhiên trong khi ReadFile gần như luôn luôn nối tiếp (vì ReadFile đọc ở vị trí tệp hiện tại và tiến lên vị trí tệp hiện tại).

2

Một lợi thế lớn của ánh xạ tệp là nó không ảnh hưởng đến bộ đệm hệ thống. Nếu ứng dụng của bạn làm quá nhiều I/O bằng phương tiện của ReadFile, bộ đệm hệ thống của bạn sẽ phát triển, tiêu thụ nhiều bộ nhớ vật lý hơn. Nếu hệ điều hành của bạn là 32 bit và bạn có nhiều hơn 1GB bộ nhớ, hơn bạn may mắn, kể từ trên Windows 32 bit kích thước của bộ nhớ cache hệ thống bị giới hạn bởi 1GB. Nếu không, bộ nhớ cache hệ thống sẽ tiêu thụ tất cả bộ nhớ vật lý có sẵn và trình quản lý bộ nhớ sẽ sớm bắt đầu dọn dẹp các trang của các tiến trình khác vào đĩa, tăng cường hoạt động của đĩa thay vì thực sự giảm bớt chúng. Hiệu ứng đặc biệt đáng chú ý trên Windows 64 bit, nơi kích thước bộ nhớ cache bị giới hạn chỉ bởi bộ nhớ vật lý có sẵn. Mặt khác, việc ánh xạ tệp không dẫn đến việc phát triển quá nhiều bộ đệm hệ thống và đồng thời không làm suy giảm hiệu suất.