AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Dateiinfos lesen (schnellste Variante?)
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiinfos lesen (schnellste Variante?)

Ein Thema von MicMic · begonnen am 27. Jan 2020 · letzter Beitrag vom 31. Jan 2020
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 29. Jan 2020, 10:41
Dir wird wohl nichts anderes übrig bleiben, als die Infos, die Du anzeigen willst, Stück für Stück aus den Files zu kitzeln (meist).
Im Extremfall ist das aufwändig und es entstehen (schon betriebssystemseitig) Hilfskonstruktionen wie z.B. die Thumbnails Dateien für Bilder oder formatspezifisch eben das, wo Du gerade baggerst, Headerinfos oder auch Embedded Preview Images. (nebenbei, solche Mechanismen kannst Du natürlich auch nutzen-also mühsam erungene Dateiinfos puffern, solange die Datei unverändert bleibt)
Wenn du das so schnell es geht auslesen möchtest finde ich das schon mal löblich. Man sieht trotz dieses relativ selbstverständlichen Gedankens immer wieder schlechte Lösungen, die auch noch so frech sind, sich im Explorer einzuzecken und die Anzeige eines Ordners zum Geduldspiel werden lassen.
Wie auch immer die formatspezifische Implementierung bei Dir aussehen wird, ich empfehle Dir Multithreading sowie Nebenläufigkeit als Implementierungsbasis des Gesamtprozess. Dass man nicht ungefragt vorhandene (Ordner)Einstellungen überschreibt, sollte ja selbstverständlich sein.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 29. Jan 2020, 12:03
Ich nutzte damals mehrere 4KB puffer, datenköpfe einlesen, parallel die puffer nach headern/signaturen prüfen, die dann wiederum an entprechende implementierungen weitergeleitet wurden.
Spezialfall bei mir waren halt die typen wo infos eher am dateiende hinterlegt sind. Da ging ich genauso vor allerdings mit 8 - 10 kb puffer und hab meine signaturen rückwärts gegengeprüft.
Am schlimmsten sind multimedia daten die sich aus den vorhanden chunks zusammensetzen und aufgerechnet werden müssen, die hab ich außen vor gelassen. (realmedia war des glaube ich)

edit
Am schlimmsten...*
sind auch dateien die nur über sprungziele zum ergebnis führen und mittendrinn "kaputte" vorkommen. Diesen fall hatte ich bei Entwicklung nicht berücksichtigt, also das sollte auch gecheckt werden nicht das man übers dateiende hinaus was lesen mag
Gruß vom KodeZwerg

Geändert von KodeZwerg (29. Jan 2020 um 12:17 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 31. Jan 2020, 12:16
Naja, noch probiere ich ein wenig herum an verschiedenen Dateitypen aber werde wohl schon für andere Ideen Ausschau halten
Es kommt ja auch noch dazu, dass es zu manchen Dateitypen noch verschiedene Versionen gibt. Dies muss man alles prüfen. Also doch viel viel Arbeit wenn man es richtig machen will. Danke für Eure Tipps und Anregungen.

Gruß Mike
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 31. Jan 2020, 12:37
Wozu brauchst du das denn?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 31. Jan 2020, 12:45
Ps: Je nach Anzahl der Dateien könnte es schneller über CreateFile / THandleStream abgearbeitet werden, da die Daten von Windows (soweit ichs in Erinnerung habe) nicht gecached werden... einfach mal rumprobieren / benchen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 31. Jan 2020, 15:09
TFileStream und auch alles andere im Delphi arbeitet ebenfalls mit nur CreateFile.
Und da nirgendwo explizit angegeben wird, dass dort der Cache deaktiviert werden soll, wird somit immer durch den Cache gegangen, auch wenn es sich um einen Datenträger mit deaktivertem Schreibcache handelt, geht es erst durch den Cache des Windows, nur wird da dann eben sofort das Speichern angestoßen.

Also eher andersrum. Man müsste den FileCache deaktivieren, aber dann musst du aufpassen, dass du nur komplette Sektoren ausliest, weil sonst knallt es.
Dann wäre das (einmalige) Lesen extrem vieler und/oder großer Dateien schneller, welche nicht in den Cache (RAM) passen würden, also wo der Cache ständig nachladen und rauswerfen muß und wobei vor allem der Programmspeicher kräftig ausgelagert wird.

Bzw. man könnte zumindestens dem Cache sagen, dass man nur vorwärs liest (kein Random-Access) und womit "theoretisch" der Cache dafür sein Verhalten optimieren könnte.
(Bauchgefühl bemerkt dabei allerdings keinen Unterschied, aber theoretisch könnte der Cache dabei wissen, dass man diese gecachten Daten nur einmal braucht, kann sie sofort nach dem Zugrif wieder entladen, anstatt andere Dinge aus dem RAM zu werfen, wie wenn er nur nach dem Alter/letzter Zugriff der Daten ginge)

FILE_FLAG_SEQUENTIAL_SCAN
FILE_FLAG_NO_BUFFERING
FILE_FLAG_WRITE_THROUGH
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (31. Jan 2020 um 15:12 Uhr)
  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 01:45 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