Schnelligkeit von read vs. dim
Übersicht

lastkingBetreff: Schnelligkeit von read vs. dim |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es macht doch bestimmt mehr Sinn, Daten vor der Hauptschleife mit read in ein Array zu laden und das dann anzufragen, als wärend des Schleifendurchgangs ständig restore/read zu benutzen oder?
Es handelt sich um ein paar mehr Werte, könnte sein das es weit über 100-1000 werden... lg |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, sollte sehr viel schneller sein. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es kommt darauf an, ob du die Werte nachher auch noch speichern willst. Wenn ja, dann nimm das Dim-Feld, aber ein Zugriff auf das Dim-Feld ist langsamer als auf die Variante mit Data und Restore.
Dim verwendet nämlich wahrscheinlich die Funktion malloc() oder calloc() - das ist langsam. Data speichert die Daten direkt in der Datei, diese werden dann schon mit der EXE in den Ram geladen und müssen nicht über eine For-Schleife eingebaut werden. Mit folgendem Code habe ich das übrigens getestet(2300 Werte - Messung der Zugriffszeit): Code: [AUSKLAPPEN] Local s,time,i,k,ntime
Dim array(2299) Restore lab For i=1 To 2300 Read s array(i-1)=s Next Const durchlaeufe=50 time=MilliSecs() Restore lab For k=1 To durchlaeufe Restore lab For i=1 To 2300 Read s Next Next ntime=MilliSecs()-time ntime=ntime/durchlaeufe Print "Read: "+ntime time=MilliSecs() For k=1 To durchlaeufe For i=1 To 2300 s=array(i-1) Next Next ntime=MilliSecs()-time ntime=ntime/durchlaeufe Print "Dim-Feld: "+(MilliSecs()-time) WaitKey End .lab Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 Data 50,20,15,12,582,483,1729,183,28,1829,1,38429 Data 28,5910,1948,15028,487291,47,482,5,8,2841,47 |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dass bei dir Read schneller ist, liegt daran, dass du die Zeit falsch misst. Beim Read-Durchlauf dividierst du ntime durch die Anzahl Durchläufe und zeigst die Variable dann an. Beim Dim-Durchlauf aber dividierst du ntime zwar durch die Anzahl Durchläufe, zeigst aber nachher nicht die Variable an, sondern (Millisecs()-time).
Ausserdem hast du beim Dim-Durchlauf eine Subtraktion drin (array(i-1)). Das macht bei vielen Durchläufen einiges aus, also lass doch die Schleife von 0 bis 2299 laufen und nimm die Subtraktion raus. So ist Dim bei mir ca. doppelt so schnell BlitzBasic: [AUSKLAPPEN] Dim Array( 2299 ) Und so nebenbei, Arrays verwenden malloc() nur beim redimensionieren, nicht beim Auslesen ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
und wer liest schon nen array nur von vorne bis hinten aus? was passiert, wenn du einen wert in der mitte willst? bei read brauchst du eine schleife oder viele sprungmarken, bei dims kannst du einfach direkt das richtige element adressieren | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja, ich habe schon lange nicht mehr mit BB programmiert - tut mir leid, wegen der falschen Aussage.
Goodje hat natürlich auch Recht. Aber Noobody: Da mit dem malloc() (bzw. calloc()) bist du dir ganz sicher? Wie sollte der Speicher für die Dim-Felder bereitgestellt werden, wenn malloc() nicht ausgeführt wird? mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Thunder hat Folgendes geschrieben: Wie sollte der Speicher für die Dim-Felder bereitgestellt werden, wenn malloc() nicht ausgeführt wird?
malloc() wird ausgeführt, nämlich jedesmal, wenn ein Array erstellt oder neu dimensioniert wird. Wenn du Dim Foo( 500 ) schreibst, wird Platz für 501 Elemente geschaffen. Dieser Platz ist immer da und muss nicht bei der Zuweisung eines Wertes neu geholt werden. Darum ist die Art, wie der Speicher des Arrays geholt wird, beim Auslesen/Schreiben komplett egal. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
lastking |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay, vielen Dank für die Erklärungen!! ![]() Ich finds top, dass man hier so schnell Leute hat, die einem jede Frage beantworten... ![]() Der Aspekt von Goodjee ist natürlich ein sehr guter Grund für Dims...! Hat ich noch garnicht drüber nachgedacht, ob ich das noch brauche. Vorerst läuft die List enämlich bei mir durch. Für eine Bilanz. Bis denn! |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Noobody: Ja, aber ich war überrascht, weil du geschrieben hast, dass malloc() nur beim redimensionieren aufgerufen wird. Anscheinend habe ich dich falsch verstanden.
mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Vorerst läuft die List enämlich bei mir durch. Für eine Bilanz.
Eine Bilanz von nicht-dynamschien Daten (=Data) zu machen ist aber sehr witzlos - da könntest du das Ergebnis deiner Bilanz doch auch gleich als Data ins Programm einbinden - Spart dir Rechnerei und Aufwand. Die Rechnerei ergibt ja logischerweise nur dann Sinn wenn sich die Daten ändern können (sprich erst recht in nem Array sind - was deine erste Frage klar beantwortet). mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group