BlitzArray oder Dim
Übersicht

![]() |
StarGazerBetreff: BlitzArray oder Dim |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo allerseits
Ich benutze sehr oft eindimensionale Dims -> Dim Enemy(99) Es stellt sich mir oft die Frage ob da BlitzArrays besser wären -> Global Enemy[99] Was benutzt ihr denn da ? Sind BlitzArrays besser als Dim, vielleicht schneller bei der Abfrage ? oder haben sie doch irgendwelche Nachteile ? Welche der beiden Arten ist denn sinnvoller ? |
||
Apocalyptic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Onlinehilfe hat Folgendes geschrieben: Blitzarray's hören sich schneller an - sind aber genau so schnell wie DIM-Felder. Außer Integer-Array's können aber auch Float- oder String-Array's definiert werden. Das Kennzeichen (%, # oder $) kann aber stets nur bei der Definition mit LOCAL oder GLOBAL angegeben werden. Weiterhin haben Blitzarray's gegenüber den DIM-Feldern folgende Vor- und Nachteile:
Nachteile -Blitzarray's können in der Größe nicht verändert werden. -Blitzarray's können nur eindimensional sein. Vorteile -Blitzarray's lassen sich global und lokal definieren. -Blitzarray's können als TYPE-Eigenschaft verwendet werden: TYPE test FIELD x FIELD y FIELD image[11] END TYPE -Blitzarray's können an Funktionen übergeben werden: TEST1() FUNCTION TEST1() LOCAL array[10] TEST2(array) PRINT array[7] END FUNCTION FUNCTION TEST2(abc[10]) abc[7]=123 END FUNCTION Mehr gibts da eigentlich nicht zu sagen... |
||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Beide haben ihre eigene Anwendung:
DIMs sind global und können multidimensional sein BlitzArrays können nur 1dimensional sein. Dafür können sie in Types verwendet werden, als auch bei Funktionsaufrufen übergeben werden. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
und blitzarrays können by reference übergeben werden | ||
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: blitzarrays können by reference übergeben werden
wie geht das? bzw. geht das auch mit normalen Variablen? Ich dachte bis jetzt, man kann alles in BB nur by Value übergeben... |
||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke
Wie es aussieht kann ich also bei meiner alten Gewohnheit bleiben, und weiterhin eindimensionale Dims benutzen. ----------------------------------------------------------------------- wuste garnicht das man Dims nachhinnein noch vergrößern kann, jedenfalls wüste ich nicht wie. Arrays Funktionsaufrufen übergeben werden ? TEST2(abc) FUNCTION TEST2(abc[10]) abc[7]=123 END FUNCTION ist das dann so richtig ?, werden dann an die FUNCTION TEST2 alle ABC BlitzArraywerte übergeben ?, und man kann sie dann auslesen ? |
||
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bissel OT aber ...
Arrays, egal ob normales oder Blitzarray sind recht langsam. Types und Banks sind um ein vielfaches schneller. |
||
Apocalyptic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Arrays sollen langsamer als Types sein o_O ?
Eher im Gegenteil... |
||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oops ... sorry, hatte hier irgendwie falsch gemessen!
weiß nicht wie ich so daneben liegen konnte ![]() hier zumindest ein Speedtest Code: [AUSKLAPPEN] size = 1024 * 1024 * 4 Type ding Field b End Type Dim a(size) ;---------------- t1 = MilliSecs() For i=0 To size-1 a(i) = i Next For i=1 To size b = a(i) Next Print ("Array: "+Int(MilliSecs() - t1)) Delay(300) For i=1 To size ding.ding = New ding Next ;---------------- t1 = MilliSecs() For ding.ding = Each ding ding\b = i Next For ding.ding = Each ding b = ding\b Next Print ("Types: "+Int(MilliSecs() - t1)) Delay(300) bank = CreateBank(size*4) ;---------------- t1 = MilliSecs() For i=0 To size-1 PokeInt(bank,i*4,i) Next For i=0 To size-1 b = PeekInt(bank,i*4) Next Print ("Bank: "+Int(MilliSecs() - t1)) Delay(300) ;---------------- t1 = MilliSecs() Local bb[4194304] ;ist 1024*1024*4 For i=1 To size bb[i] = i Next For i=1 To size b = bb[i] Next Print ("Blitzarray: "+Int(MilliSecs() - t1)) WaitKey End |
||
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: bank = CreateBank(size*4)
ich glaub damit machst du die Bank zwar genau so groß, aber dannach fängt deine Schleife mit Zitat: For i=0 To size-1
an, was bedeutet, das er alles 4 mal so oft durchrattert... |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
da alles *4 gerechnet wird geht er nur 1 mal duch die Bank wegen der Integer(4Byte)
das -1 muß sein da sonst die Bank zu klein ist! |
||
[BB2D | BB3D | BB+]
|
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Timo hat Folgendes geschrieben: Zitat:
blitzarrays können by reference übergeben werden
wie geht das? bzw. geht das auch mit normalen Variablen? Ich dachte bis jetzt, man kann alles in BB nur by Value übergeben... so zum Beispiel : Code: [AUSKLAPPEN] Global array[10] schreibe_100_in_ersten_wert(array) Print array[1] Function schreibe_100_in_ersten_wert(feld[10]) feld[1] = 100 End Function Das ganze ist aber ziemlich krampfhaft. Zum Beispiel geht diese Funktion oben nur mit arrays, die genau 10 werte hat. Aber es ist eine By Reference Übergabe, Sie ist nur nicht wirklich zu gebrauchen ![]() (Wenn doch,klärt mich auf) |
||
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
achso, nein ich hatte eigentlich an so etwas wie in delphi gedacht, so hat das ja wenig sinn ![]() Code: [AUSKLAPPEN] Procedure TForm1.TueWas(Var x:integer);
begin x := 3; end; gut, das mit den arrays ist zwar auch call by reference, aber was mir eigentlich an BB fehlt, ist, das man auch normale integer-Variablen by reference übergeben kann... ![]() @Rallimen: Ups, falsch geguckt ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group