Интересно, почему опубликовано так много «решений»?
Если мое понимание новичка о том, как работает GetFiles, верно, есть только два варианта, и любое из приведенных выше решений может быть сведено к следующему:
GetFiles, затем фильтр: быстро, но убийца памяти из-за сохранения служебной информации до применения фильтров
Фильтр в то время как GetFiles: чем медленнее установлено больше фильтров, но тем не менее не используется объем памяти, поскольку не сохраняется служебная информация.
Это объясняется в одном из приведенных выше постов с впечатляющим тестом: каждый параметр фильтра вызывает отдельную операцию GetFile, поэтому одна и та же часть жесткого диска читается несколько раз.
На мой взгляд, вариант 1) лучше, но использование директорий SearchOption.AllDirector для таких папок, как C: \, потребовало бы огромных объемов памяти.
Поэтому я бы просто сделал рекурсивный под-метод, который просматривает все подпапки, используя опцию 1)
Это должно вызывать только 1 операцию GetFiles для каждой папки и, следовательно, быть быстрым (Вариант 1), но использовать только небольшой объем памяти, так как фильтры применяются после чтения каждой подпапки -> издержки удаляются после каждой подпапки.
Пожалуйста, поправьте меня, если я ошибаюсь. Я, как я уже сказал, довольно плохо знаком с программированием, но хочу получить более глубокое понимание вещей, чтобы в конечном итоге стать хорошим в этом:)