Моя проблема в том, что приложение загружает тысячи файлов слишком долго.Да, я знаю, что это займет много времени, но я хотел бы сделать это быстрее в любое время.Под «нагрузкой» я имею в виду открыть файл, чтобы получить его дескриптор, а затем прочитать первые 100 байтов или около того.
Итак, моя основная стратегия заключалась в создании второго потока, который будет открываться и закрываться(без чтения содержимого) все файлы.Это, кажется, помогает, потому что поток запускается перед основным потоком, и я предполагаю, что операционная система кэширует эти файловые дескрипторы заранее, так что, когда мой основной поток открывает их, это быстро открывается.Это действительно помогло, потому что поток может начать кэшировать эти файловые дескрипторы, в то время как мой основной поток анализирует данные, считанные из этих файлов.
Так что мой реальный вопрос ... что еще я могу сделать, чтобы сделать это быстрее?Какие есть подходы?У кого-нибудь был успех в этом?
Я слышал о вызовах предварительной загрузки ОС, но это было для страниц виртуальной памяти.Есть ли способ сообщить ОС, эй, мне очень скоро понадобятся все эти файлы - предлагаю начать собирать их для меня раньше времени.У меня довольно грубая тема.
Могу ли я использовать дисковые технологии низкого уровня?Возможно ли, что это поможет?Прямо сейчас все загруженные файлы находятся в одной папке.Я предполагаю, что нет никакого способа определить, где именно на диске они лежат и какой порядок открытия файлов будет самым быстрым для диска.Я также предполагаю, что на диске есть некоторые аппаратные средства, чтобы сделать это настолько эффективным, насколько это возможно.
Мое приложение в основном для Windows, но предложения Unix также помогут.
Япрограммирование на C ++, если это имеет значение.
Спасибо, -julian