Trên hệ điều hành hiện đại (Windows, Linux, v.v.), bạn hoàn toàn không thể làm gì để tối ưu hóa thời gian tìm kiếm! Đây là lý do:
- Bạn đang ở trong hệ thống đa nhiệm trước làm trống. Ứng dụng của bạn và tất cả dữ liệu của nó có thể được chuyển sang đĩa bất kỳ lúc nào - tác vụ chuyển người dùng, trình bảo vệ màn hình khởi động, pin hết, v.v.
- Bạn không thể đảm bảo rằng tệp nằm liền kề trên đĩa. Làm điểm bullet đầu tiên của Aaron sẽ không đảm bảo một tập tin không bị phân mảnh. Khi bạn bắt đầu viết các tập tin, hệ điều hành không biết làm thế nào lớn các tập tin sẽ có được để nó có thể đặt nó trong một không gian nhỏ, phân mảnh nó khi bạn ghi thêm dữ liệu vào nó.
- Ánh xạ bộ nhớ tệp chỉ hoạt động miễn là kích thước tệp nhỏ hơn phạm vi địa chỉ có sẵn trong ứng dụng của bạn. Trên Win32, dung lượng không gian địa chỉ có sẵn khoảng 2Gb - bộ nhớ được ứng dụng sử dụng. Ánh xạ các tệp lớn hơn thường liên quan đến việc hủy ánh xạ và ánh xạ lại các phần của tệp, điều này sẽ không phải là cách tốt nhất để làm.
- Đưa dữ liệu vào giữa tệp không giúp được gì, cho tất cả những gì bạn biết, phần trung tâm của tệp có thể là bit phân mảnh nhiều nhất.
Để diễn giải Raymond Chen, nếu bạn phải hỏi về giới hạn OS, có thể bạn đang làm điều gì đó sai. Đối xử với hệ thống tập tin của bạn như một hộp đen bất biến, nó chỉ là những gì nó được (tôi biết, bạn có thể sử dụng RAID và như vậy để giúp đỡ).
Bước đầu tiên bạn phải thực hiện (và phải được thực hiện bất cứ khi nào bạn tối ưu hóa) là để đo lường những gì bạn hiện có. Không bao giờ giả định bất cứ điều gì. Xác minh mọi thứ bằng dữ liệu cứng.
Từ bài đăng của bạn, có vẻ như bạn chưa thực sự viết bất kỳ mã nào, hoặc, nếu bạn có, hiện không có sự cố về hiệu suất.
Giải pháp thực sự duy nhất là nhìn vào bức tranh lớn hơn và phát triển các phương pháp để lấy dữ liệu khỏi đĩa mà không bị trì hoãn ứng dụng.Điều này thường sẽ thông qua truy cập không đồng bộ và tải đầu cơ. Nếu ứng dụng của bạn luôn truy cập vào đĩa và làm việc với các tập con nhỏ của dữ liệu, bạn có thể cân nhắc sắp xếp lại dữ liệu để đặt tất cả nội dung hữu ích vào một nơi và các dữ liệu khác ở nơi khác. Nếu không biết miền đầy đủ vấn đề thì không thể thực sự hữu ích.
Bạn có biết rằng bạn cần phải đi đến những độ dài này để tối ưu hóa mã của mình không? Điều này nghe có vẻ như tối ưu hóa sớm. Tại sao không viết một cái gì đó lành mạnh đầu tiên, và tốc độ nó lên sau khi bạn đã chứng minh bạn có một nút cổ chai? –