Я вижу две возможные причины, по которым этот процесс может идти медленно:
1) Дисковый ввод / вывод занимает слишком много времени. Это будет реальным ограничением, с которым вы ничего не можете поделать. Обычно операционная система довольно хорошо хранит структуры в памяти, которые позволяют гораздо быстрее находить файлы в ваших папках. Если он слишком медленный, вам может потребоваться создать индекс самостоятельно. Все зависит от того, как вы это делаете.
В любом случае, если это проблема (вы можете попытаться измерить), тогда никакая фильтрация на стороне клиента не поможет, так как это не займет много времени, независимо от того, где вы это делаете. Вместо этого вы собираетесь замедлить работу клиента, отправив ему больше данных для сортировки.
2) Что-то не так с обходом каталога. Вы говорите, что это "рекурсивно". Если вы имеете в виду, что он на самом деле рекурсивный, то есть метод, который вызывает себя всякий раз, когда сталкивается с новым каталогом, то это может замедлить вас (накладные расходы действительно увеличиваются). В википедии есть кое-что о обходе дерева , но в основном просто используйте очередь или стек, чтобы отслеживать, где вы находитесь, вместо использования состояния вашего метода для этого.
Обратите внимание, что файловая система на самом деле не является деревом, но я предполагаю, что это в этом случае. В противном случае это немного раздражает.
Я не согласен с другими постерами, что вы не можете реализовать это в процессе. Он должен работать довольно хорошо до определенного момента, пока нет необходимости в пакетных заданиях.