![]() |
AW: GetFileSize - welches ist die bessere Funktion?
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; |
AW: GetFileSize - welches ist die bessere Funktion?
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. |
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
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. |
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
Vielleicht bekomm,t man damit ja sogar ein DirectoryExists hin. |
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
|
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
Um Einflüsse durch das Betriebssystem zu minimieren, muss es ausreichend lange laufen. Der Cache wurde als Problem schon genannt. Aber auch jeder Task, Dienst, etc. nimmt Einfluss. Spätestens, wenn irgendein anderer Thread etwas mit der Festplatte macht, werden die Messungen nahezu sinnlos, wenn nur so kurze Zeiträume verwendet werden. Ich nehme außerdem mal an, dass du keinen speziellen Rechner für die Tests verwendest. Das heißt, dass jeder neue Durchlauf andere Bedingungen hat. Wenn du zum Beispiel deine Test-Anwendung neu kompiliert hast, sind die Voraussetzungen verändert. Wenn du also ernsthaft feststellen willst, welches die schnellste Variante ist, musst du erstmal die Testumgebung optimieren. Ansonsten sind deine Ergebnisse nicht wirklich aussagekräftig. btw: Ich habe selbst eine kleine Anwendungen, die Dateien im mittleren 6-stelligen Bereich verarbeitet. Das Einlesen der Informationen dauert i.d.R. weniger als 3 Minuten, wobei die Visualisierung und Sortierung schon enthalten sind. Über eine großartige Optimierung habe ich mir nur wenige Gedanken gemacht, da es meistens ein automatisierter Prozess ist. Daher stellt sich mir die Frage, wofür brauchst du denn eine derartige Optimierung? |
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
|
AW: GetFileSize - welches ist die bessere Funktion?
Aus der Praxis heraus würde ich sagen, es ist vom Aufwand her um Längen billiger, die Liste der Systemanforderungen um den Punkt SSD (ggf. sogar PCIe-SSD, M.2 usw.) zu ergänzen, als sich derart in Millisekunden zu versteigen. Allerdings gebe ich zu, es gibt Anwendungsfälle wo das absolut gerechtfertigt ist.
Zitat:
|
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
Dann baue deinen Test doch mal so um, dass er statt 180 ms besser ca. 2 Minuten dauert. Das würde zumindest den Cache-Anteil bei der Bewertung stark verringern. Bleibt der Unterschied dann immer noch bei über 50%, würde ich auch von einer Signifikanz ausgehen. |
AW: GetFileSize - welches ist die bessere Funktion?
Zitat:
GetFileSizeA: 26 Sekunden Laufzeit GetFileSizeD: 2 Sekunden Laufzeit |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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