![]() |
Schnellste Methode zum Lesen von Daten
Hallo
Hab nur mal eine kurze Frage: Was ist die schnellste Möglichkeit zum Auslesen von nicht typisierten Dateien? Viele Grüße Hyperspacer |
Re: Schnellste Methode zum Lesen von Daten
LoadFromFile
|
Re: Schnellste Methode zum Lesen von Daten
Text oder Binär?
Struktur bekannt? Wie groß sind die Dateien? |
Re: Schnellste Methode zum Lesen von Daten
@mkinzler:
Es werden binäre Daten ausgelesen. Dateigröße zwischen 1Mb - 9Mb. |
Re: Schnellste Methode zum Lesen von Daten
Versuchs mal mit einem Stream. Der hat u.a. die ReadBuffer-Methode, mit der du die ganze datei in den Speicher laden kannst.
|
Re: Schnellste Methode zum Lesen von Daten
Zitat:
Ich möchte ID3 v2.3 auslesen. Und das möglichst schnell. Ist Blockread schneller als es mit nem TFileStream auszulesen? Bei der Gelegenheit noch eine Frage: Was soll der Extended Header im Tag? Zitat:
Grüße |
Re: Schnellste Methode zum Lesen von Daten
wenn du die id tags auslesen willst, musst du doch nicht die ganze datei einlesen. dafür gibt es doch schon diverse komponenten.
|
Re: Schnellste Methode zum Lesen von Daten
ich weiß das ich nicht die ganze datei auslesen muss. mache ich auch nicht(glaub ich, aber es wird die ganze geladen?):
Beispiel:
Delphi-Quellcode:
So mache ich das im Moment. Meine Frage war ob es eine schnellere methode gibt aus der datei zu lesen.
FileMode := 0; {ist es günstig diesen zu wählen?}
AssignFile(F,AFilename); Reset(F,1); Blockread(f, Buffer, 3); CloseFile(f); |
Re: Schnellste Methode zum Lesen von Daten
Also ich weiß es nicht, aber ich denke mal, dass beim Lesen aus einer Datei der gesamte Dateiinhalt gepuffert wird, daher wird es schneller als mit file of Byte/TextFile oder einem FileStream wohl nicht gehen.
|
Re: Schnellste Methode zum Lesen von Daten
Aber letzendlich wird doch alles auf einer Grundfunktion aufbauen die aus der Datei liest. und jeh weniger andere dinge zwischen dem aufruf von beispielsweise blockread() und dieser grundfunktion geschehen, desto schneller sollte es gehen. wenn TFileStream.Read() zum Beispiel erst boch sonst was macht, bevor die grundfunktion aufgerufen wird, dauert es länger.
ich hoffe es ist einigermaßen verständlich, was ich meine. Hier ist es ähnlich: ![]() Application.Exename macht erst sonst was bevor es dann doch auch paramStr(0) aufruft.(Wenn ich das richtig verstanden habe) |
Re: Schnellste Methode zum Lesen von Daten
Also ich denke mal, dieses kleine auf-den-Stack-pushen und wieder runterpoppen dürfte kaum was ausmachen. Vor allem wenn man bedenkt, dass eine Festplatte unglaublich langsam ist und daher eine Festplatte sogar einen Interrupt braucht, um in den Speicher zu laden.
Da fallen die paar Assemblerschritte überhaupt nicht ins Gewicht, die dauern ein paar Nanosekunden, die Festplatte braucht ein paar Millisekunden. Wie du da jetzt genau liest, ist im Prinzip egal. |
Re: Schnellste Methode zum Lesen von Daten
hmmm... Schade ich dacht ich könnt noch ein bisschen die Zeit drücken.
Danke für alle Antworten. Hyperspacer PS: Für die Sache mit dem Extended Header mach ich wohl liebern neues Thema auf, falls ich nichts in der Suche finde! |
Re: Schnellste Methode zum Lesen von Daten
Naja, ein bisschen geht schon, aber das fällt halt kaum ins Gewicht.
Lesen von der Festplatte dauert halt mehrere ms, die paar Assemblerschritte allerhöchstens 50 ns, das macht eine Zeitersparnis von maximal 0,005%. |
Re: Schnellste Methode zum Lesen von Daten
Moin Hyperspacer,
wäre es da nicht einfacher, Du schaust Dir das Dateiformat an, nimmst TFileStream, positionierst Dich immer auf die für Dich interessanten Stellen, und liest dann nur die? Der interne Buffer dürfte hier im wesentlichen betriebssystemspezifisch sein. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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