Как открыть и прочитать тысячи файлов очень быстро - PullRequest
0 голосов
/ 12 октября 2011

Моя проблема в том, что приложение загружает тысячи файлов слишком долго.Да, я знаю, что это займет много времени, но я хотел бы сделать это быстрее в любое время.Под «нагрузкой» я имею в виду открыть файл, чтобы получить его дескриптор, а затем прочитать первые 100 байтов или около того.

Итак, моя основная стратегия заключалась в создании второго потока, который будет открываться и закрываться(без чтения содержимого) все файлы.Это, кажется, помогает, потому что поток запускается перед основным потоком, и я предполагаю, что операционная система кэширует эти файловые дескрипторы заранее, так что, когда мой основной поток открывает их, это быстро открывается.Это действительно помогло, потому что поток может начать кэшировать эти файловые дескрипторы, в то время как мой основной поток анализирует данные, считанные из этих файлов.

Так что мой реальный вопрос ... что еще я могу сделать, чтобы сделать это быстрее?Какие есть подходы?У кого-нибудь был успех в этом?

Я слышал о вызовах предварительной загрузки ОС, но это было для страниц виртуальной памяти.Есть ли способ сообщить ОС, эй, мне очень скоро понадобятся все эти файлы - предлагаю начать собирать их для меня раньше времени.У меня довольно грубая тема.

Могу ли я использовать дисковые технологии низкого уровня?Возможно ли, что это поможет?Прямо сейчас все загруженные файлы находятся в одной папке.Я предполагаю, что нет никакого способа определить, где именно на диске они лежат и какой порядок открытия файлов будет самым быстрым для диска.Я также предполагаю, что на диске есть некоторые аппаратные средства, чтобы сделать это настолько эффективным, насколько это возможно.

Мое приложение в основном для Windows, но предложения Unix также помогут.

Япрограммирование на C ++, если это имеет значение.

Спасибо, -julian

1 Ответ

0 голосов
/ 12 октября 2011

Моя первая мысль - это будет сложно обойти на программном уровне.

Вы обнаружите, что Linux и OSX могут получить доступ к тысячам таких файлов за долю времени, которое требуется Windows. Я не знаю, насколько ты контролируешь машину. Если вы можете хранить тысячи файлов в разделе FAT, вы должны увидеть лучшие результаты, чем в NTFS.

Как часто вы сканируете эти файлы и как часто они меняются. Если соотношение сильно зависит от чтения, имеет смысл скопировать начало каждого файла в кеш. Кэш может хранить имя файла, время модификации и 100 байтов каждого из тысячи файлов.

...