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:

http://codebetter.com/blogs/matthew.podwysocki/archive/2008/10/16/functional-net-fighting-friction-in-the-bcl-with-directory-getfiles.aspx

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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage