AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetFileSize - welches ist die bessere Funktion?

Ein Thema von Glados · begonnen am 20. Okt 2017 · letzter Beitrag vom 4. Apr 2024
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 23. Okt 2017, 13:10
Das bestätigt dann ja deine Annahme.
OK, war eigentlich abzusehen, da ja FileExists, FindFirst und FindClose in der D-Variante gar nicht vorkommen. Aber dieser Performance-Test war ja noch einfach. Bei komplizierteren Sachen, die nicht so offensichtlich sind, muss man schon genauer testen. Und darum ging es mir an dieser Stelle.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#22

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 23. Okt 2017, 13:25
Bei komplizierteren Sachen, die nicht so offensichtlich sind, muss man schon genauer testen. Und darum ging es mir an dieser Stelle.
Um strukturelle Fehler im Testaufbau zu finden, sollte man die verschiedenen Durchläufe zunächst immer mit derselben Implementierung laufen lassen (hier alle Messungen erst mit A, dann B usw.). Wenn dann immer die erste Messung signifikant schlechter ist als die folgenden (z.B. wegen des Cache), sollte man den Test solange verbessern bis das ausgeglichen ist.

Das ist so in etwa das Pendant zum Test-Driven Development, bei dem man einen Test bewusst fehlschlagen lässt, um erstmal den Test-Harness zu überprüfen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#23

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 23. Okt 2017, 13:59
Alles erledigt was ihr vorgeschlagen habt.

Resultat:
A = 2 Minuten, 45 Sekunden
D = 31 Sekunden
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#24

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 16:23
Aus gegebenem Anlass habe ich mal gemessen, wie die Funktion GetFileInformationByHandle, mit der auch die Dateigröße bestimmt werden kann, sich schlägt. Hierbei wurde die Zeit bei GetFileAttributesEx und GetFileInformationByHandle für die Verarbeitung von etwa 165.000 Dateien mit zusammen > 3 TB von einer SSD gemessen. Die Messungen erfolgten einerseits nach Rechner-Neustart und dann beim erneuten Einlesen, andererseits mit Defender Antivirus (Windows 10, Echtzeitschutz + Manipulationsschutz) und ohne.

DateiInfoByHandle  
Neustart mit Defender 660 sec (!)
Neustart ohne Defender 11-14 sec
Zweitstart mit Defender 10-21 sec
Zweitstart ohne Defender 14-22 sec

GetFileAttributesEx
Neustart mit Defender 8 sec
Neustart ohne Defender 5 sec
Zweitstart mit Defender 5 sec
Zweitstart ohne Defender 5 sec

Der Defender Antivirus macht GetFileInformationByHandle ja fast unbrauchbar. Gibt es da ein Gegenmittel?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 16:42
Gibt es da ein Gegenmittel?
Nicht alles einzeln abfragen und dafür auch noch jede Datei öffnen, damit der Defender jeder Live-Scanner nicht gezwungen wird sich alle Dateien anzusehn


MSDN-Library durchsuchenFindFirstFileEx mit FIND_FIRST_EX_LARGE_FETCH
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Apr 2024 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 16:44
[deleted]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Apr 2024 um 16:45 Uhr) Grund: ups
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#27

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 18:29
Schwer zu verstehen. Wie soll das gehen, nicht alle einzeln abzufragen? Ein Test mit dem direkten Aufruf von FindFirstFileExW ergab Zeiten zwischen 13 und 19 Sekunden, also wesentlich langsamer als GetFileAttributesEx. Der Aufruf von GetFileInformationByHandle lässt sich nicht umgehen, da ich die Anzahl der Links und den File Index benötige.

Die Dateigröße benötige ich nur, um festzustellen, ob Dateigleichheit in Frage kommt. Immerhin weiß ich jetzt, dass es etwas bringt, die Dateigrößen zuerst mit GetFileAttributesEx zu ermitteln, um alle diejenigen Dateigrößen auszusondern, die nur einmal vorkommen.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 19:31
Schwer zu verstehen. Wie soll das gehen, nicht alle einzeln abzufragen? Ein Test mit dem direkten Aufruf von FindFirstFileExW ergab Zeiten zwischen 13 und 19 Sekunden, also wesentlich langsamer als GetFileAttributesEx.
Du fragst aber nicht etwa jede Datei einzeln so ab, oder?

Es geht ja eben darum, dass du die Anzahl der Abfragen reduzierst. Sprich dass du auf diese Weise gleich alle Dateien in einem Verzeichnis durchgehst.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#29

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 22:00
Wie soll ich die nicht alle einzeln abfragen? Ich brauche die Daten für jede einzelne Datei. Ich habe eine Klasse TDat und eine TObjectList<TDat> , lese die Dateien mittels TDirectory.GetFiles in ein TStringDynArray ein und lege für jede Datei eine Instanz von TDat an. Bisher habe ich das mit GetFileInformationByHandle gemacht und von allen Dateien die entsprechenden Felder gefüllt; jetzt denke ich, dass ich viel Zeit spare, wenn ich mit GetFileAttributesEx erst einmal die herausfiltere, deren Bytegröße nur einmal vorkommt, und erst dann die verbliebenen mit GetFileInformationByHandle bearbeite. Das wäre nicht nötig, wenn der Defender Antivirus die Aktion nicht so wahnsinnig verlangsamen würde, aber da ist vermutlich nichts zu machen.

Geändert von Benmik ( 2. Apr 2024 um 22:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#30

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 2. Apr 2024, 22:11
Du könntest das TDirectory.GetFiles overload nehmen, das ein TFilterPredicate akzeptiert. In dem Filter hast du Zugriff auf SearchRec.Size.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 11:03 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