Я работаю в проекте, где я должен перечислить имена файлов с диска. Я попробовал два метода
Мои наблюдения:
P.s Измерения взяты из двух отдельных машин.
С этими наблюдениями меня немного смущает, зависит ли разбор MFT от его размера? Почему многопоточность не обеспечивает лучшее решение для MFT меньшего размера?
Многопоточность с FindFirstFile
вряд ли предоставит вам какую-либо выгоду. Если у вас есть два отдельных потока, идущих за одним и тем же физическим диском, вы будете вынуждены искать ненужные заголовки дисков, что будет означать больше времени для выполнения чтения, что вполне может привести к многопоточной версии с использованием FindFirstFile
а также FindNextFile
быть помедленнее чем однопоточная версия.
Ходьба MFT потенциально может быть быстрее, чем использование FindFirst / FindNext, но за счет довольно большой дополнительной работы. И, если у вас нет специальных знаний о диске, вероятно, не будет быстрее довольно оправдать расходы на написание кода для работы на этом более низком уровне. И вполне вероятно, будет медленнее в общем случае. Я подозреваю, что разработчики NTFS и те, кто написал FindFirstFile / FindNextFile, знают кое-что о MFT, чего большинство из нас не знает, в том числе о том, как эффективно его выполнять.
Других решений пока нет …