Мое приложение индексирует содержимое всех жестких дисков на компьютерах конечных пользователей.
Я использую Directory.GetFiles и Directory.GetDirectories для рекурсивной обработки всей структуры папок. Я индексирую только несколько выбранных типов файлов (до 10 типов файлов).
Я вижу в профилировщике, что большая часть времени индексации тратится на перечисление файлов и папок - в зависимости от соотношения файлов, которые фактически будут проиндексированы до 90 процентов времени.
Я бы хотел сделать индексацию максимально быстрой. Я уже оптимизировал само индексирование и обработку проиндексированных файлов.
Я думал об использовании вызовов Win32 API, но на самом деле я вижу в профилировщике, что большая часть времени обработки фактически тратится на эти вызовы API, выполняемые .NET.
Существует ли (возможно, низкоуровневый) метод, доступный из C #, который бы делал перечисление файлов / папок хотя бы частично быстрее?
Как и просили в комментарии, мой текущий код (просто схема с обрезанными нерелевантными частями):
private IEnumerable<IndexedEntity> RecurseFolder(string indexedFolder)
{
//for a single extension:
string[] files = Directory.GetFiles(indexedFolder, extensionFilter);
foreach (string file in files)
{
yield return ProcessFile(file);
}
foreach (string directory in Directory.GetDirectories(indexedFolder))
{
//recursively process all subdirectories
foreach (var ie in RecurseFolder(directory))
{
yield return ie;
}
}
}