Windows XP медленнее читает текстовые файлы при запуске в C ++;упреждающей? - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть приложение, написанное на C ++, Visual Studio 2005, работающее исключительно в Windows XP.Когда приложение запускается, оно читает большое количество (> 20000) текстовых файлов (.nfo), которые содержат XML.Каждый файл имеет размер 800 байт.

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

Я использую базовую функцию из стандартной библиотеки (std) для открытия / чтения / закрытия файлов.

Я полагаю, что проблема не в реализации приложения, а в Windows XP.

Мое текущее внимание сосредоточено на Prefetcher в Windows XP.Мое приложение имеет файл .pf, расположенный в каталоге предварительной выборки.Однако ни один из моих текстовых файлов .nfo не находится в списке файлов для предварительной выборки.Например, в файле предварительной выборки, связанном с Internet Explorer, вы можете видеть, что его временные файлы, такие как изображения, перечислены в файле предварительной выборки.Я полагаю, что если бы я мог заставить мой файл появиться в этом списке;операции открытия / чтения с ними будут быстрее, так как Windows уже будет знать, где они находятся на диске.

Почему мои файлы не находятся в файле предварительной загрузки .pf вместе с моей DLL?Каково условие появления файла в файле предварительной выборки?

Имеет ли это смысл?

Мне также было интересно, есть ли способ заставить Windows XP предварительно извлечь полный каталог или список файлов?

Это уже коммерческий продукт, который продается с компьютером.Поэтому у нас есть полный доступ к настройке ОС.Однако мы не планируем вносить экстремальные изменения в наше приложение.

С уважением

1 Ответ

4 голосов
/ 17 февраля 2012

IMO, если вы читаете> 20000 файлов при запуске, это определенно проблема с приложением.
Почему кто-то предпочел бы настроить ОС, а не исправлять свое приложение, мне неясно.

Если для> 20000 файлов требуется 10 минут, вы смотрите <30 мс на файл, что не <em>, что плохо для вращающегося диска, особенно если вы используете стандартный C ++ файловые процедуры, которые имеют довольно много служебной информации, IIRC.

Когда это занимает 10 секунд (0,5 мс на файл), это потому, что файлы уже находятся в системном кеше диска.

Даже если у вас все работает, предварительная выборка волшебным образом не делает вещи быстрее; ОС все равно придется искать, открывать, читать и закрывать> 20000 файлов, что займет в порядке минут.

Лучший способ улучшить время загрузки - объединить файлы и прочитать их все сразу.
Для максимальной эффективности поместите их в сжатый архив.
Или используйте SSD.

...