У меня есть приложение, написанное на 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 предварительно извлечь полный каталог или список файлов?
Это уже коммерческий продукт, который продается с компьютером.Поэтому у нас есть полный доступ к настройке ОС.Однако мы не планируем вносить экстремальные изменения в наше приложение.
С уважением