Это ужасно, и причина поиска файлов на платформах Windows ужасна, потому что MS допустила ошибку, которую они, похоже, не хотят исправлять. Вы должны быть в состоянии использовать
SearchOption.AllDirectories
И мы все вернули бы скорость, которую хотим. Но вы не можете этого сделать, потому что GetDirectories требуется обратный вызов, чтобы вы могли решить, что делать с каталогами, к которым у вас нет доступа. MS забыла или не думала тестировать класс на своих компьютерах.
Итак, мы все остаемся с бессмысленными рекурсивными циклами.
В C # / Managed C ++ у вас очень мало оприонов, это тоже варианты, которые использует MS, потому что их кодеры тоже не разобрались, как обойти это.
Главное, чтобы элементы отображения, такие как TreeViews и FileViews, выполняли только поиск и показывали то, что могут видеть пользователи. На контроле есть несколько помощников, включая триггеры, которые сообщают вам, когда вам нужно заполнить некоторые данные.
В деревьях, начиная с свернутого режима, ищите этот каталог, как и когда пользователь открывает его в дереве, что намного быстрее, чем ожидание заполнения всего дерева.
То же самое в FileViews, я склонен к правилу 10%, сколько бы элементов не помещалось в области отображения, еще 10% готовы, если пользователь прокручивает, это приятно реагирует.
MS выполняет предварительный поиск и просмотр каталога. Небольшая база данных каталогов, файлов, это означает, что у вас на OnOpen ваши деревья и т. Д. Есть хорошая быстрая отправная точка, она немного падает при обновлении.
Но смешайте эти две идеи, возьмите ваши каталоги и файлы из базы данных, но выполните поиск обновлений, когда узел дерева расширен (только этот узел дерева) и как другой каталог выбран в дереве.
Но лучшее решение - добавить систему поиска файлов в качестве службы. У MS это уже есть, но, насколько мне известно, мы не получаем к нему доступа, я подозреваю, что это потому, что оно неуязвимо для ошибок «сбой доступа к каталогу».
Как и в случае с MS, если у вас есть служба, работающая на уровне администратора, вы должны быть осторожны, чтобы не потерять свою безопасность только ради небольшой дополнительной скорости.