Es muss aber jedesmal erst in eine String gewandelt werden.
Dazu hatte ich heute Morgen eine Idee. Der Integer ist bei x86 immer vier byte lang und bei x64 immer acht Byte lang.
Diesen kann man auch direkt als String betrachten und als MapKey übergeben. Muss ja nicht als Mensch leserlich sein.
So geht es leider nicht!
Habe Nullbytefolge nicht bedacht und führt somit zur Kollision.
Lasse es aber zur Erinnerung stehen.
Code: Alles auswählen
Structure udtMapKeyIndex
StructureUnion
i.i
s.s{SizeOf(integer)}
EndStructureUnion
EndStructure
Define Gadget.udtMapKeyIndex
NewMap Value.i()
NewMap Value2.i()
start = ElapsedMilliseconds()
For i = 1 To 200000
Gadget\i = i
Value(Gadget\s) = i
Next
time1 = ElapsedMilliseconds() - start
start = ElapsedMilliseconds()
For i = 1 To 200000
Gadget\i = i
Value(Str(i)) = i
Next
time2 = ElapsedMilliseconds() - start
r1.s = "Zeit für kleine Zahlen" + #LF$ + "Struct: " + Str(time1) + #LF$ + "String: " + Str(time2)
ClearMap(Value())
start = ElapsedMilliseconds()
For i = 100000000 To 100200000
Gadget\i = i
Value(Gadget\s) = i
Next
time1 = ElapsedMilliseconds() - start
start = ElapsedMilliseconds()
For i = 100000000 To 100200000
Gadget\i = i
Value(Str(i)) = i
Next
time2 = ElapsedMilliseconds() - start
r1 + #LF$ + #LF$ + "Zeit für große Zahlen (Pointer, #PB_Any)" + #LF$ + "Struct: " + Str(time1) + #LF$ + "String: " + Str(time2)
MessageRequester("Result", r1)