Przeszukanie katalogów w poszukiwaniu ścieżek do plików

0

Szukam ścieżek do określonych plików znajdujących się w określonych podkatalogach za pomocą:

string[] paths = Directory.GetFiles(root_folder, "*_CFG.xml", SearchOption.AllDirectories);

Taka konstrukcja przeszukuje moje drzewo katalogów w czasie ok.12 minut - czy to długo dla 100k katalogów i pod katalogów?
Jak to przebudować żeby przyspieszyć i aby szukać plików (*_CFG.xml) tylko w katalogach o nazwie CFG przy czym nie wiadomo na jakim poziomi znajduje się katalog IK w stosunku do root_folder ( czasami 2 poziomy niżej czasami trzy a czasami nawet cztery i pięć).
Pewnie szybciej by było przeszukując każdy poziom z osobna?

1

Odnośnie tego, czy to dobry czas - zależy to w dużej mierze od danego kompa - rodzaku dysku, procesora, systemu itp. Ale możesz sobie to samo porównać - zainstaluj i odpal Total Commandera i tam daj mu takie samo polecenie, a potem porównaj czasy tych przeszukiwań. Możesz też zrobić testy z kilkoma innymi programami, żeby mieć lepszy punkt odniesienia.

0

ogolnie tutaj wybor jezyka moze miec znaczenie (pamietam, ze kiedys widzialem test odnosnie c++ vs c# i czytanie plikow i roznica byla spora)

jako lekture polecam te dwa watki
https://stackoverflow.com/que[...]-to-get-directory-data-in-net
https://stackoverflow.com/que[...]cursive-ntfs-directories-in-c

0

@fasadin: będę czytał tylko nie chcę przechodzić na c++

0

hej

a czy masz jakies info o tych plikach xml.. czy możesz zrobić podczas zapisywania tabele której potem będzie się odpytywał ? z punktu widzenia optymalizacji to długo i to bardzo.
Lub napisać jakis serwis osobny który będzie robił tabele w bazie.. lub pliki nawet txt.. czyli taki index

0

Dla ukonkretnienia wątku.
Natywne w systemie operacyjnym Windows jest (chyba nadal) listowanie płasko w zadanym katalogu, z jedną maską wyszukiwania.

Wszystko inne (rekurencja, wiele masek) jest nadbudową, która moze być lepsza (dla nas) lub gorsza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0