Array in Strukturen und damit auch in LinkedList´s
Verfasst: 08.04.2008 23:06
Nochmal ein anderer Ansatz um Array´s in Strukturen und in LinkedList´s reinzupacken
Code: Alles auswählen
; --------------------------------------------------------
; Array´s im Geschwindigkeitsvergleich sowie
; Array´s in Strukturen bzw. in LinkedList´s
; --------------------------------------------------------
; --------------------------------------------------------
; Zeiten für original PB Array
DisableDebugger
Start = GetTickCount_()
Dim Array(999)
For lp = 1 To 100000
For Position = 0 To 999
Wert = Position
Array(Position) = Wert
Next
For i = 0 To 999
Wert = Array(i)
Next
Next lp
Zeit = GetTickCount_()-Start
EnableDebugger
MessageRequester("Zeit für original PB Array: "+Str(Zeit)+" ms","")
; --------------------------------------------------------
; Zeiten für Array in Strukturen
; by NicTheQuick - dt. PB Forum
Structure arr
StructureUnion
arr.l[0]
dummy.l
EndStructureUnion
EndStructure
DisableDebugger
Start = GetTickCount_()
Define *a.arr
*a = AllocateMemory(SizeOf(arr) * 10)
For lp = 1 To 100000
For i = 0 To 999
Wert = i
*a\arr[i] = Wert
Next
For i = 0 To 999
Wert = *a\arr[i]
Next
Next
Zeit = GetTickCount_()-Start
EnableDebugger
MessageRequester("Zeit für Array in Strukturen by NicTheQuick: "+Str(Zeit)+" ms","")
; --------------------------------------------------------
; Zeiten für Array in Strukturen
; by Joachim Berz
; Da die Array´s in einer Struktur stecken, kann dieses Array
; auch in LinkedList´s verwendet werden. Der Vorteil gegenüber
; der Methode von NicTheQuick ist der, dass nach Löschen des
; LL-Element´s oder der ganzen LinkedList der durch das Array
; belegte Speicher ( =STRING ! innerhalb der Struktur) auto-
; matisch wieder freigegeben wird, und nicht manuell mit
; FreeMemory freigegeben werden muß. Außerdem ist diese Methode
; der Arrayzugriffe sogar schneller als die der original PB-Array´s
; und kann somit in zeitkritischen Routinen auch als Ersatz für die
; normalen Array´s dienen.
; Beachtenswert finde ich, dass hier kein optimierter Assembler-Code
; zum Einsatz kommt, sondern reiner PB-Code und dennoch ist diese
; Methode schneller als Array´s in PB - Fred was hast Du gemacht ???
; Nachteil: Der Speicherbereich des Array´s ist nicht mit Nullwerten
; vorbelegt, kann aber noch gemacht werden
; Ist so wie es hier steht für LONG´s ausgelegt, beim Einsatz von
; anderen Typen ist eine Anpassung erforderlich
Structure MyArray
Array.s
EndStructure
#TypLength = 4
DisableDebugger
Start = GetTickCount_()
Define Werte.MyArray
Werte\Array = Space(1000*#TypLength)
StartAddr = @Werte\Array
For lp = 1 To 100000
For Position = 0 To 999
Wert = Position
PokeL(Position*#TypLength+StartAddr,Wert)
Next
For Position = 0 To 999
Wert = PeekL(Position*#TypLength + StartAddr )
Next
Next lp
Zeit = GetTickCount_()-Start
EnableDebugger
MessageRequester("Zeit für Array in Strukturen by Joachim Berz: "+Str(Zeit)+" ms","sogar schneller als die original PB Array´s")