Снижение производительности API CreateFile - PullRequest
2 голосов
/ 28 мая 2009

У меня есть приложение, которое восстанавливает много данных из библиотеки. Мы используем Windows Server 2003. По мере развития процесса мы наблюдаем снижение производительности. Я добавил некоторые счетчики производительности для 4 основных задач: «Создать файл», «Читать из библиотеки», «Запись данных», «Закрыть файл». Мы восстанавливаем миллионы файлов. Что я заметил, так это то, что производительность API createfile снижается по мере продвижения процесса. Другие операции согласованы.

Есть идеи, что может быть причиной этого?

Заранее спасибо за все ответы / предложения.

С уважением, Бхушан

Ответы [ 4 ]

2 голосов
/ 09 июня 2009

Является ли файловая система NTFS? Уходят ли миллионы файлов в один и тот же каталог и имеют ли они одинаковые имена? Из статьи technet о внутренностях NTFS :

Если в папке имеется большое количество файлов (300 000 или более), и файлы имеют длинные имена файлов с одинаковыми начальными символами, время, необходимое для создания файлов, увеличивается. Увеличение происходит потому, что NTFS основывает короткое имя файла на первых шести символах длинного имени файла. В папках с более чем 300 000 файлов короткие имена файлов начинают конфликтовать после того, как NTFS использует все 8.3 имен, которые похожи на длинные имена файлов. Повторяющиеся конфликты между созданным коротким именем файла и существующими короткими именами файлов приводят к тому, что NTFS регенерирует короткое имя файла от 6 до 8 раз.

Вы можете запросить это поведение с помощью утилиты командной строки 'fsutil':

fsutil behavior query disable8dot3
1 голос
/ 29 мая 2009

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

Например, если вы создаете все выходные файлы в одном и том же каталоге, вы можете обнаружить, что CreateFile замедляется, потому что нужно проверять наличие новых и новых имен файлов на наличие коллизий.

0 голосов
/ 29 мая 2009

Мой экстрасенсорный отладчик говорит, что у тебя утечка ручек. Закрываете ли вы все эти вызовы, которые вы делаете в CreateFile?

0 голосов
/ 28 мая 2009

Возможно, борьба с системным кешем? Вы можете посмотреть в разделе «Поведение кэширования» в документации: CreateFile .

...