Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.847 Beiträge
 
Delphi 12 Athens
 
#9

AW: Schnellste Möglichkeit einen Verzeichnisbaum einzulesen

  Alt 10. Dez 2024, 21:20
Der Flaschenhals ist hier die Latenz beim Zugriff auf den Server. Es wird für jeden Abruf der jeweils nächsten Datei eine Anfrage an den Server geschickt und darauf gewartet.

Lösen kann man das auf zwei Wegen:
  • Du kannst die Abfrage mit mehreren Threads erledigen, indem du z.B. einen Thread pro Anfangsbuchstabe erstellst oder einen pro Unterverzeichnis oder ähnliches, je nachdem was passt. Anders als bei lokalen Abfragen ist die eingesparte Wartezeit auf die Antworten des Servers größer als die Verlangsamung durch parallele Abfragen ins Dateisystem. In aktuellen Delphis kann man dafür TTask oder parallel for verwenden, bei Delphi 7 kannst du TThread nutzen.
  • Am besten ist aber die Nutzung einer SMB-Bibliothek wie libsmb2. Diese hat den großen Vorteil, dass smb2_opendir und smb2_readdir die Dateiinformationen direkt in einem Puffer abrufen, so dass nicht bei jeder Datei einzeln eine Anfrage an den Server geschickt wird. Wenn man den verwendeten Puffer im System noch erhöhen kann, erhöht sich die Geschwindigkeit zusätzlich.
    Die Implementierung ist relativ einfach, da nur ein paar exportierte Funktionen und Strukturen übersetzt werden müssen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat