Frage zu Maps bezüglich Slots

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Frage zu Maps bezüglich Slots

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Frage zu Maps bezüglich Slots

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Frage zu Maps bezüglich Slots

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Frage zu Maps bezüglich Slots

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Frage zu Maps bezüglich Slots

Beitrag von PMV »

STARGÅTE hat geschrieben:Vorallem scheint es auch zu stimmen ^^
:twisted:
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten