Seite 1 von 1

Frage zu Maps bezüglich Slots

Verfasst: 29.10.2010 23:12
von STARGÅTE
Tachchen,

mir ist eben beim überlesen der Hilfe aufgefallen das NewMap ja einen optionalen Parameter hat: [Slots]

Auch erklrt die Hilfe für as dieser ist:
Der optionale Parameter 'Slots' definiert, wie viele "Slots" die Map zum Speichern ihrer Elemente erhält. Je mehr Slots sie hat, desto schneller ist sie beim Zugriff auf ein Element, aber desto mehr Speicher benötigt sie auch. Es ist ein Kompromiss - abhängig davon, wie viele Elemente die Map letztendlich enthalten wird und wie schnell der direkte Zugriff sein soll. Der Standardwert ist 512. Dieser Parameter hat keinen Einfluss darauf, wieviele Elemente eine Map enthalten kann.
Gibts es dazu irgendwo nähere nformationen ?
Wie verhalten sich Slots zum Speicherbedarf ? (Linear, Quadratisch, Exponentiell)
Wie verhalten sich Slots zur zugriffsgeschwindigkeit ? (Linear, Quadratisch, Exponentiell)

Wann bietet es sich an diesen Parameter zu ändern ?
Slots erhöhen wenn man sehr oft auf Elemente zur Laufzeit zugreift?
Slots verkleinern wenn man sehr viele "kleine" Maps hat (zB als Elemente einer Liste) ?

Danke für Antworten.

Re: Frage zu Maps bezüglich Slots

Verfasst: 30.10.2010 00:13
von PureLust
Ich schätze mal, dass durch den [Slots]-Parameter die Größe der LookUp-Tabelle bestimmt werden kann.

Eine entsprechende Diskussion dazu findest Du HIER.

Gruß, PL.

Re: Frage zu Maps bezüglich Slots

Verfasst: 30.10.2010 01:08
von PMV
Slots bestimmt die Größe der Hashtabelle, 512 * 4 sind 2048 Byte auf x86 Systemen.
Wenn du wesentlich mehr als 512 Elemente hast, lohnt es sich, die Tabelle zu vergrößern. Wenn du wesentlich weniger Elemente in der Map hast, ist es ratsam, diese zu verkleinern.

Solange es nur um eine einzellne Map geht, ist der Speicherverbrauch zu vernachlässigen. Wen interssieren schon ein paar Byte, wo aktuelle Systeme doch mehrere GB haben. :lol: Interessant wird es aber dann, wenn eine Map z.B. in einer Liste genutzt wird. Wenn man nur eine Map mit ~20 Elementen hat, aber von dieser Map tausende anlegt, wird es bei jeweils 512 "Slots" ziemlich eng durch nicht benötigten Speicherplatz. Eine Hashmap ist nur so lange effizient, wie die Kollisionen entsprechend gering bleiben. Bei vermehrten Kollisionen wird das ganze schnell ineffizient.

MFG PMV

Re: Frage zu Maps bezüglich Slots

Verfasst: 30.10.2010 12:18
von STARGÅTE
Danke euch beiden.

Vorallem PMVs Beschreibung hat mir sehr geholfen...
Vorallem scheint es auch zu stimmen ^^

Code: Alles auswählen


#Slots = 512
#Size = 10000

Structure Test
 Map Integer.i(#Slots)
EndStructure

Dim Test.Test(#Size)

Debug "Speicherverbrauch: "+StrF((#Slots*4*#Size+#Size*SizeOf(Test))/1024/1024,3)+" MB"
Delay(1000000)
Ich werde meine Programme anpassen.
Dass heißt:
Meine Language-Map (in der für jedes angezeigte Wort der String für die jeweilige Sprache gespeichert wird)
Language("Quit") ergibt "Beenden" usw.
werde ich vergrößern, da diese nur einmal angelegt wird, jedoch mit sicherheit mehr als 512 Elemente haben wird.
Und da sie oft benutzt wird, muss sie schnell sein.

Re: Frage zu Maps bezüglich Slots

Verfasst: 30.10.2010 13:08
von PMV
STARGÅTE hat geschrieben:Vorallem scheint es auch zu stimmen ^^
:twisted: