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
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 21. Okt 2017, 15:51
Das mit dem Cache ist doch so:
wenn Windows nicht aus dem Cache ließt, dann wird das Ganze sicherlich sehr sehr viel länger dauern. Oder irre ich mich?
Das hier dauert bei mir nur rund 180ms. Ich kann mir nicht vorstellen, dass hier ohne Cache gearbeitet wird.
Bis auf den ersten Zugriff ist das wohl auch so. Deswegen solltest du einen zusätzlichen Aufruf vor die erste Messung machen, damit der Nicht-Cache-Zugriff diese nicht verfälscht. Du kannst auch mal die Reihenfolge der Aufrufe vertauschen. Z.B. erst C, dann B dann A. Bekommst du dann dasselbe Ergebnis bezüglich der Performance?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 22. Okt 2017, 10:39
Ich werfe auch noch eine weitere Funktion in den Raum.
Delphi-Quellcode:
function GetFileSizeD(const FileName: string): Int64;
var
  FileInfo: TWin32FileAttributeData;
begin
  FillChar(FileInfo, SizeOf(FileInfo), 0);
  if GetFileAttributesEx(PChar(FileName), GetFileExInfoStandard, @FileInfo) then
  begin
    Int64Rec(Result).Hi := FileInfo.nFileSizeHigh;
    Int64Rec(Result).Lo := FileInfo.nFileSizeLow;
  end
  else
    Result := 0; // -1 wäre ein besserer Wert, da es Dateien gibt die Größe 0 haben
end;
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 22. Okt 2017, 12:19
Deine Funktion ist bisher mit Abstand die schnellste.
Sie ist circa fünfmal so schnell wie B.
Ist FindFirst denn wirklich SO langsam und GetFileAttributes(Ex) so viel schneller? Kommt mir schon fast komisch vor.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 22. Okt 2017, 12:59
Ist FindFirst denn wirklich SO langsam
FindFirstFile, das hinter FindFirst steckt, ist für das Abfragen der Informationen von mehreren Dateien ausgelegt. Wenn du nur eine Datei haben willst, dann ist der Overhead im Vergleich zum GetFileAttributes um einiges größer. Zudem steckt ein anderer System-Aufruf dahinter. Vor allem wenn man auf ein Netzlaufwerk zugreift, wird FindFirstFile so richtig langsam.

Zu FileOpen+FileClose: Virenscanner klinken sich hier sehr gerne ein, und können das ganze gravierend verlangsamen, vor allem beim Öffnen zum Schreiben wird FileClose sehr langsam. Aber auch beim Öffnen zum Lesen prüft der Virenscanner im FileOpen die Datei.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#5

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 22. Okt 2017, 13:26
Zitat:
Vor allem wenn man auf ein Netzlaufwerk zugreift, wird FindFirstFile so richtig langsam.
Ja das habe ich schon oft bemerkt. Ich versuche mich da heute mal reinzufuchsen und spiele ein bisschen mit GetFileAttributes rum.
Vielleicht bekomm,t man damit ja sogar ein DirectoryExists hin.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: GetFileSize - welches ist die bessere Funktion?

  Alt 22. Okt 2017, 18:44
Vielleicht bekomm,t man damit ja sogar ein DirectoryExists hin.
Ja bekommt man. Im Flags Feld ist dann FILE_ATTRIBUTE_DIRECTORY gesetzt, vorausgesetzt es existiert. Man darf sich vom "File" in GetFileAttribute(Ex) nicht verwirren lassen.
  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 19:39 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