Win32-API-Leistung von FindFirstFile und FindNextFile im Vergleich zur Befehlszeile
Beim Durchsuchen von Verzeichnissen nach Dateien mit einem Platzhaltermuster ist ein unerwartetes Leistungsproblem aufgetreten.
Wir haben 180 Ordner mit jeweils 10.000 Dateien. Eine Befehlszeilensuche mitdir <pattern> /s
wird fast sofort ausgeführt (<0,25 Sekunden). In unserer Anwendung dauert die gleiche Suche jedoch zwischen 3-4 Sekunden.
Wir haben zunächst versucht mitSystem.IO.DirectoryInfo.GetFiles()
mitSearchOption.AllDirectories
und habe jetzt die Win32 API Aufrufe ausprobiertFindFirstFile()
undFindNextFile()
.
Wenn Sie unseren Code mit profilieren, wird der Großteil der Ausführungszeit für diese Aufrufe aufgewendet.
Unser Code basiert auf dem folgenden Blogbeitrag:
Wir fanden das langsam, deswegen wurde das aktualisiertGetFiles
Funktion, um eine zu nehmenstring
Suchmuster anstelle eines Prädikats.
Kann jemand Aufschluss darüber geben, was an unserer Herangehensweise falsch sein könnte?