Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   FindFirst und FindNext noch modern? Lieber IShellFolder? (https://www.delphipraxis.net/191363-findfirst-und-findnext-noch-modern-lieber-ishellfolder.html)

a.def 6. Jan 2017 19:09

FindFirst und FindNext noch modern? Lieber IShellFolder?
 
Ich lese gerade zum ersten mal von IShellFolder und lese auch hier und dort, dass das Iterieren durch Verzeichnisse damit wesentlich schneller sein soll
als mit FindFirst und FindNext.

Ich selber benutze nur FindFirst und FindNext. Es ist lokal sehr schnell. Selbst bei einer halben Millionen Dateien.
Aber wenn ich demselben Code ein Verzeichnis auf meinem gemappten Netzlaufwerk oder einer USB-Festplatte übergebe, dauert das ewig.

Hier soll IShellFolder wohl ebenfalls wesentlich schneller sein.

a) wie kann IShellFolder schneller sein? Die Netzwerkfestplatte kommt ja nicht näher, nur weil ich kein Find mehr benutze
b) wie benutzt man IShellFolder? ich finde leider keinerlei Beispiele.
c) was würdet ihr benutzen?

EWeiss 6. Jan 2017 19:11

AW: FindFirst und FindNext noch modern? Lieber IShellFolder?
 
Zitat:

ich finde leider keinerlei Beispiele.
Google sollte unter umständen helfen. (bestimmt nicht versucht).

http://delphi.cjcsoft.net/viewthread.php?tid=48467

gruss

NicoDE 9. Jan 2017 19:16

AW: FindFirst und FindNext noch modern? Lieber IShellFolder?
 
Zitat:

Zitat von a.def (Beitrag 1358286)
a) wie kann IShellFolder schneller sein?

Wahrscheinlich liefert es weniger Informationen über die Dateiobjekte.
Die Implementierung der COM-Klasse könnte dann (ab Windows 7 / Windows Server 2008 R2) FindFirstFileEx mit FindExInfoBasic und FIND_FIRST_EX_LARGE_FETCH verwenden. Der Unterschied in der Performance liegt hauptsächlich in der fehlenden Ermittlung der alternativen 8.3-Dateinamen.

Pfaffe 9. Jan 2017 19:53

AW: FindFirst und FindNext noch modern? Lieber IShellFolder?
 
Hinweis: Bei den neueren Delphis gibts auch noch:
http://docwiki.embarcadero.com/Libra...GetDirectories
http://docwiki.embarcadero.com/Libra...ctory.GetFiles
http://docwiki.embarcadero.com/CodeE...raion_(Delphi))

himitsu 9. Jan 2017 21:35

AW: FindFirst und FindNext noch modern? Lieber IShellFolder?
 
IShellFolder geht letztendlich auf die selben APIs, wie FindFirstFile.
Durch die zusätzliche Kapselung würde ich aber eher erwarten, dass es nur noch langsamer werden könnte.

NtQueryDirectoryFile


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz