В современных операционных системах (Windows, Linux и т. Д.) Вы абсолютно ничего не можете сделать, чтобы оптимизировать время поиска! И вот почему:
- Вы находитесь в упреждающей многозадачной системе. Ваше приложение и все его данные могут быть записаны на диск в любое время - пользователь переключает задание, запускается заставка, батарея разряжается и т. Д.
- Вы не можете гарантировать непрерывность файла на диске. Выполнение первого пункта Аарона не обеспечит нефрагментированный файл. Когда вы начинаете писать файл, ОС не знает, насколько большим будет файл, поэтому она может поместить его в небольшое пространство, фрагментируя его, когда вы записываете в него больше данных.
- Отображение памяти в файле работает только до тех пор, пока размер файла меньше доступного диапазона адресов в вашем приложении. На Win32 объем доступного адресного пространства составляет около 2 Гб - памяти, используемой приложением. Отображение больших файлов обычно включает в себя удаление и повторное сопоставление частей файла, что не будет лучшим решением.
- Поместить данные в центр файла не поможет, поскольку, насколько вы знаете, центральная часть файла может быть самым фрагментированным битом.
Перефразируя Раймонд Чен , если вам нужно спросить об ограничениях ОС, вы, вероятно, делаете что-то не так. Относитесь к вашей файловой системе как к неизменному черному ящику, это просто то, чем она является (я знаю, вы можете использовать RAID и т. Д., Чтобы помочь).
Первый шаг, который вы должны предпринять (и нужно делать всякий раз, когда вы оптимизируете), - это измерить то, что у вас есть. Никогда ничего не предполагай. Проверьте все с помощью достоверных данных.
Судя по вашему сообщению, вы на самом деле еще не написали никакого кода, или, если у вас есть, в данный момент проблем с производительностью нет.
Единственное реальное решение состоит в том, чтобы взглянуть на картину в целом и разработать методы извлечения данных с диска без остановки приложения. Обычно это происходит через асинхронный доступ и умозрительную загрузку. Если ваше приложение всегда обращается к диску и работает с небольшими подмножествами данных, вы можете рассмотреть возможность реорганизации данных, чтобы поместить все полезные данные в одном месте, а другие данные - в другом месте. Не зная всю проблемную область, невозможно быть по-настоящему полезным.