Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Schnellste Methode zum Lesen von Daten (https://www.delphipraxis.net/74223-schnellste-methode-zum-lesen-von-daten.html)

Hyperspacer 30. Jul 2006 20:50


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

fwsp 30. Jul 2006 20:51

Re: Schnellste Methode zum Lesen von Daten
 
LoadFromFile

mkinzler 30. Jul 2006 20:52

Re: Schnellste Methode zum Lesen von Daten
 
Text oder Binär?
Struktur bekannt?
Wie groß sind die Dateien?

Hyperspacer 30. Jul 2006 20:57

Re: Schnellste Methode zum Lesen von Daten
 
@mkinzler:
Es werden binäre Daten ausgelesen. Dateigröße zwischen 1Mb - 9Mb.

mkinzler 30. Jul 2006 21:08

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.

Hyperspacer 30. Jul 2006 21:25

Re: Schnellste Methode zum Lesen von Daten
 
Zitat:

Versuchs mal mit einem Stream. Der hat u.a. die ReadBuffer-Methode, mit der du die ganze datei in den Speicher laden kannst.
TFileStream?

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:

Where the 'Extended header size', currently 6 or 10 bytes, excludes itself. The 'Size of padding' is simply the total tag size excluding the frames and the headers, in other words the padding. The extended header is considered separate from the header proper, and as such is subject to unsynchronisation.
Was bedeutet das???

Grüße

fwsp 30. Jul 2006 21:26

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.

Hyperspacer 30. Jul 2006 21:57

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:
  FileMode := 0; {ist es günstig diesen zu wählen?}
  AssignFile(F,AFilename);
  Reset(F,1);
  Blockread(f, Buffer, 3);
  CloseFile(f);
So mache ich das im Moment. Meine Frage war ob es eine schnellere methode gibt aus der datei zu lesen.

3_of_8 30. Jul 2006 21:59

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.

Hyperspacer 30. Jul 2006 22:13

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: http://www.delphipraxis.net/internal...ct.php?t=88819

Application.Exename macht erst sonst was bevor es dann doch auch paramStr(0) aufruft.(Wenn ich das richtig verstanden habe)

3_of_8 30. Jul 2006 22:16

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.

Hyperspacer 30. Jul 2006 22:30

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!

3_of_8 30. Jul 2006 22:46

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%.

Christian Seehase 30. Jul 2006 22:54

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:

Zitat von Hyperspacer
Application.Exename macht erst sonst was bevor es dann doch auch paramStr(0) aufruft.(Wenn ich das richtig verstanden habe)

Es werden ein paar zusätzliche Kommandos ausgeführt, aber wie gesagt, nur einen Hauch mehr, so dass es im normalen Betrieb nicht messbar ist.


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