AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Schnellste Möglichkeit einen Verzeichnisbaum einzulesen
Thema durchsuchen
Ansicht
Themen-Optionen

Schnellste Möglichkeit einen Verzeichnisbaum einzulesen

Ein Thema von Hobbycoder · begonnen am 10. Dez 2024 · letzter Beitrag vom 11. Dez 2024
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

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

AW: Schnellste Möglichkeit einen Verzeichnisbaum einzulesen

  Alt 10. Dez 2024, 20: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
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#2

AW: Schnellste Möglichkeit einen Verzeichnisbaum einzulesen

  Alt 11. Dez 2024, 10:47
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.
Das werd ich mal ausprobieren. Klingt sehr gut
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Schnellste Möglichkeit einen Verzeichnisbaum einzulesen

  Alt 11. Dez 2024, 12:39
So am Rande bemerkt: Caching, auch Client Side Caching im Netzwerk, kann einen ziemlich großen Einfluss auf die Performance haben. Insofern ist es nicht ganz einfach, da was sinnvolles zu messen.
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz