Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#13

AW: Scan for Files mit der PPL

  Alt 21. Jun 2020, 12:53
Das Auflisten von Verzeichnissen mit sehr vielen Dateien ist vor allem eine große Bremse, bei diesen APIs.
FIND_FIRST_EX_LARGE_FETCH ist schon eine Verbesserung und noch mehr sollte mit der Native-API gehn, wo dann mit einem Zugriff gleich mehrere/alle Verzeichniseinträge gelesen werden können und wo die Sortierung und Synchronisierung entfält.

Dann bremst eben die Anzahl der Verzeichnisse. (viele kleine Zugriffe)

Aber alles kommt auch drauf an was man wann und wie mit den gefundenen Dateien macht.
Wer während der Dateisuche auch gleich eine "aufwändigere" Verarbeitung macht, dem reicht auch eine langsamere SuchAPI.

Und bei "diesem" Gesamttest bekommt kann man nur die APIs vergleichen, aber leider fehlt da der Anteil ohne den FileCache, welcher einen großen Einfluß hat.
Außer bei vollem, bzw. zu wenig RAM, wo der Anfang schon wieder aus dem Speicher flog, wenn man am Ende angekommen ist.
Ist das Verzeichnis aber oft im Zugriff und der Cache fast immer geladen, dann macht es so erstmal kaum Unterschiede.

Eventuell könnte man auch noch selbst einen Suchindex anlegen oder den Index der Windows-Suche verwenden.
Aber wenn ich mal was großes Suche, dann ist oft der Cache leer und es existiert kein (aktueller) Index.

Code:
C:\

TDirectory.GetFiles first     : count 723419, seconds 75,397297
TDirectory.GetFiles second : count 723419, seconds 26,8274681
TDirectory.GetFiles *.txt   : count 4591, seconds 24,1096554

SysUtils.FindFirst first     : count 723437, seconds 69,8219776
SysUtils.FindFirst second : count 723438, seconds 23,0809693
SysUtils.FindFirst *.txt   : count 4591, seconds 23,23307

FindFirstFile first     : count 723440, seconds 71,4561471
FindFirstFile second : count 723440, seconds 23,4150029
FindFirstFile *.txt   : count 4587, seconds 23,3955506

FindFirstFileEx_Two first     : ignored
FindFirstFileEx_Two second : ignored
FindFirstFileEx_Two *.txt   : API does not support Directory-Filter

FindFirstFileEx first     : count 723453, seconds 54,2829479
FindFirstFileEx second : count 723453, seconds 21,1287913
FindFirstFileEx *.txt   : count 4587, seconds 21,7199787

FindFirstFileEx_Large first     : count 723458, seconds 46,3399186
FindFirstFileEx_Large second : count 723458, seconds 22,0639785
FindFirstFileEx_Large *.txt   : count 4587, seconds 21,9976944

FindFirstFileEx_Large first     : count 723493, seconds 45,5296624
FindFirstFileEx_Large second : count 723498, seconds 24,5367251
FindFirstFileEx_Large *.txt   : count 4587, seconds 22,7366019
Code:
TDirectory      75  26
FindFirst       70  23
FindFirstFile   70  23
FindFirstFileEx 55  21
EX_LARGE_FETCH  45  22
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Jun 2020 um 13:18 Uhr)
  Mit Zitat antworten Zitat