Ich habe testweise zwei jeweils 1000 x 1000 große Arrays erzeugt (was übrigens eine Zehntelsekunde dauerte) und die dann auf zwei Arten 100 mal verglichen, einmal mit Var2Char und Stringvergleich und einmal über eine rekursive Funktion. Bei Übereinstimmung sind beide Vergleichsmethoden ungefähr gleich schnell, aber der Stringvergleich ändert seine Geschwindigkeit
nicht, wenn die Arrays ungleich sind. Die rekursive Funktion verändert ihr Verhalten entsprechend: Ein Fehler an [500,500], der also nach einem Viertel der Vergleichsoperationen gefunden wird, beschleunigt sie um den Faktor 3 bis 4.
Die Vergleichsfunktion ist aus den o.g. Gründen in diesem Code nicht enthalten:
Code: Alles auswählen
FUNCTION Main()
LOCAL a1 := {}, a2 := {}, nCtr, aSubArray := Array(1000), nSeconds := Seconds(), c1, c2
CLEAR
* Array 1000 x 1000 erzeugen
FOR nCtr := 1 to 1000
aSubArray[nCtr] := nCtr
NEXT
FOR nCtr := 1 to 1000
aAdd(a1,aClone(aSubArray))
aAdd(a2,aClone(aSubArray))
NEXT
? Seconds()-nSeconds
nSeconds := Seconds()
* 100 Vergleiche mit V2C
FOR nCtr := 1 to 100
c1 := Var2Char(a1)
c2 := Var2Char(a2)
IF c1 == c2
ENDIF
NEXT
? Seconds()-nSeconds
nSeconds := Seconds()
* 100 Vergleiche mit ACompare (rekursiv)
FOR nCtr1 := 1 to 100
IF aCompare(a1,a2)
ENDIF
NEXT
? Seconds()-nSeconds
nSeconds := Seconds()
a1[500,500] := 759 // Fehler ungefähr in der Mitte, ein Viertel so viele Vergleichsoperationen
* 100 Vergleiche mit V2C
FOR nCtr := 1 to 100
c1 := Var2Char(a1)
c2 := Var2Char(a2)
IF c1 == c2
ENDIF
NEXT
? Seconds()-nSeconds
nSeconds := Seconds()
* 100 Vergleiche mit ACompare (rekursiv)
FOR nCtr1 := 1 to 100
IF aCompare(a1,a2)
ENDIF
NEXT
? Seconds()-nSeconds
RETURN nil