[Gelöst]Optimalstes 4D array?
Übersicht

![]() |
AnniXaBetreff: [Gelöst]Optimalstes 4D array? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey, ich hätte mal eine frage =)
welches wäre eurer meinung nach die optimalste (schnellste und speicherschonendste) vaeriante 4Dimensionale daten zu speichern, in diesem speziellen fall: Es handelt sich in diesem fall um eine 3D Map: Code: [AUSKLAPPEN] Map[x,y,z] jedoch möchte ich pro position 2 daten speichern. wie ginge das nun am besten? das array um eine 4 dimension erweitern? Code: [AUSKLAPPEN] Map[x,y,z,a] ( Map[worldX,worldY,WorldZ,2] ) oder lieber ein type mit 2 feldern in den array tun? Code: [AUSKLAPPEN] type dings field A:int field B:int end type Map[x,y,z]:dings oder das ganze in 2 arrays aufteilen? Code: [AUSKLAPPEN] MapA[x,y,z] MapB[x,y,z] welches wäre der beste weg? wie würdet ihr das machen? |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
- Zuletzt bearbeitet von AnniXa am Sa, Dez 12, 2009 6:59, insgesamt einmal bearbeitet
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde die Variante mit den Types verwenden.
Warum? Die Variante mit den Types ist eindeutig flexibler, und OOPiger. Btw. Ein Array aus Types erstellt man so: Code: [AUSKLAPPEN] Local MeinArray:TMeinType[,]=New TMeinType[10,10]
|
||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Eine andere Möglichkeit, die ich bevorzugen würde, wäre noch:
BlitzMax: [AUSKLAPPEN] Gloabl Map:Int [ ab ] [ x, y, z ]
|
||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
er fragte nach der schnellsten und speicherschonensten variante,
nicht nach der variante die am einfachsten zu erweitern ist (oop) die antwort auf die frage lautet : eine 4. dimension dem array hinzufügen also map [x, y, z, datenebene] |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab das ganze mal durchgetestet und bin zu einem intressanten ergebnis gekommen:
Code: [AUSKLAPPEN] Global test:Int[100,100,100,2] verbraucht (laut Taskmanager) 9.852 k, wenn mittels Framework brl.system nur das nötigste reingeladen wird.
Code: [AUSKLAPPEN] Global test1:int[100,100,100]
braucht knapp mehr, nämlich 9.864 k
Global test2:int[100,100,100] der oop-ansatz mit Code: [AUSKLAPPEN] Type T2
braucht intressanterweise aber nur 5.944 k.
Field x:Int,y:Int End Type Global test:T2[,,]=New T2[100,100,100] geschwindigkeit hab ich nicht getestet, aber was speicherverbrauch angeht is die oop-lösung intressanterweise wirklich die schnellste. btw, @bbpro2: annixa ist immer noch weiblich ![]() |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
DAK:
Dein Array of T2 is ja auch noch leer, also da steht überall nur null drin. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht doch auch mit 2 Dimensionen:
Warum nicht so Code: [AUSKLAPPEN] Map[ID,Field]
ID gibt die ID des Verticles (oder was auch immer) an. In Field werden dann Sachen wie XYZ-Position, und die Daten gespeichert. (ähnlich wie bei Types) Code: [AUSKLAPPEN] Map[1,1]
wäre dann zum Beispiel die X-Position des ersten Verticles ![]() Ob das ganze so speicherschonend ist, weiß ich natürlich auchnicht. ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Öhm, der Sinn solcher Sachen wie Tilemaps ist ja gerade, dass wir durch die Position des Objekts zu diesem selbst kommen. Nicht umgekehrt! Sonst müssten wir ja alles durchgehen, um allein herauszubekommen, was gerade auf dem Bildschirm zu sehen ist. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Casiopaya |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Hinblick auf Speicherverbrauch sind die beiden gut:
Code: [AUSKLAPPEN] Global test:Int[100,100,100,2]
Code: [AUSKLAPPEN] Global test1:int[100,100,100]
Global test2:int[100,100,100] Wobei die 1. Methode hier eindeutig vorzuziehen ist. Eine Erweiterung um einen 3. Wert (auch Int) wäre einfach: Code: [AUSKLAPPEN] Global test:Int[100,100,100,3]
Man kann beim Sprung von 2 auf 3 den bisherigen Code i.Ü. auch unverändert lassen. Das Ändern der letzten Array-Dimension stellt eigentlich nie ein Problem dar. Code: [AUSKLAPPEN] Type T2
Field x:Int,y:Int End Type Global test:T2[,,]=New T2[100,100,100] Ist dann nötig und sinnvoll, wenn die Zusatzinformationen ein-zwei Integer übersteigen und komplexer werden (Zudem wenn Variablen eines Typs ungleich Int gespeichert werden sollen). Ich würd diesen Weg aber nur gehen, falls die Informationen wirklich komplexer werden, ansonsten hat man unnötigen Speicherverbrauch und vor allem schlechtere Performance. |
||
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
unnötiger speicherverbrauch und schlechte performance - dafür ordentliche
übersicht und "extrem einfache" erweiterbarkeit (einfacher als funktional zumindest) klingt doch nach oop ![]() is halt die frage was man grade braucht |
||
![]() |
Casiopaya |
![]() Antworten mit Zitat ![]() |
---|---|---|
BBPro2 hat Folgendes geschrieben: unnötiger speicherverbrauch und schlechte performance - dafür ordentliche
übersicht und "extrem einfache" erweiterbarkeit (einfacher als funktional zumindest) klingt doch nach oop ![]() is halt die frage was man grade braucht Stimme absolut zu. Kommt drauf an wie wichtig die erwähnten Komponenten wie Performance sind (relativ zum Rest des Programms). |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bitte, ich glaub euch gern, dass die reine Array-Methode ein wenig performanter ist. Aber niemals ist die viel saubere Type-Methode merklich langsamer, vorallem nicht so sehr, wie ihr es hier darstellt. Ich würde diese zu jeder Zeit vorziehen. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem liegt hierbei halt beim Garbage Collector. Bei der Type-Methode erstellt man je nach dem tausende Instanzen des Types, was einen herben Einschlag auf die Geschwindigkeit haben kann, wenn der GC anspringt (vor allem dann im Multithreaded-Build). Ausserdem ist es ziemlich mühsam, jeden einzelnen Eintrag des Arrays nachträglich mit neuen Type-Instanzen zu füllen - da gefällt mir die 4D-Array-Methode doch gleich viel besser.
Falls nun noch andere Datentypen als Int dazukommen würden, würde ich natürlich die Type-Methode bevorzugen, aber in diesem Falle hat das blosse Array einen Vorteil in der Handhabung, Geschwindigkeit und Speicherverbrauch. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
AnniXa |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke für die tipps =)
ich habe es nun auch mit einem "stinknormalen" 4d array gemacht. erweitert soll es später nicht werden, jedenfalls wüste ich jetzt nicht wie,und wenn dann vergrößere ich einfach den maximal wert des letzten array. |
||
|moonForge|
Ich bin Pokémon Meisterin seit 1998! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group