Array vs. List vs. Map
Spoiler anzeigen
Ich habe mir gerade kleine Performance-Test für meiner Projekt gemacht. Da es so schön geworden ist, habe ich mich nun entschieden habe, das mit euch mitzuteilen. Einige von euch müsste ja schon bereits kennen.:
Alles anzeigen
Ganz im Herz kann ich euch List und Array (wenn man ihn auch richtig benutzt.) empfehlen.
Wobei ich List doch viel mehr empfehle aufgrund der erweiterte funktionen.
Viel Spaß damit.
[Edit:]
Blöde Forum, der hat meine Textabstand runiert.
Array 2D vs. Grid
Spoiler anzeigen
Ich kann "99999" x "99999" nicht nehmen, da Array Limit an 32000x32000 begrenzt ist und bei ds_grid wird dann mein Arbeitsspeicher voll.
Nur ein kleiner Test:
Array konnte ich problemlos 10000x10000 erstellen. (bei 30000x30000 kam "Out of Memory").
bei DS-Grid habe ich problem bei 10000x10000 (Out of Memory)
Ich habe erstmal ein Test mit "1000x1000" gemacht, damit es auf beiden geht.
Wie ich sehe, ist Array wesentlich schneller. Wenn man aber die spezielle Funktion von ds_grid benutzt, ist dann ds_grid schneller, viel schneller als array.
Spoiler anzeigen
Alles anzeigen
Ihr könnt selber die Performance testen, indem ihr dieser Skript benutzt:
Ich habe mir gerade kleine Performance-Test für meiner Projekt gemacht. Da es so schön geworden ist, habe ich mich nun entschieden habe, das mit euch mitzuteilen. Einige von euch müsste ja schon bereits kennen.:
GML-Quellcode
- ==============================Create/Addition==============================
- --------------------------------------
- for(i = 0; i < 99999; i++){
- array[i] = 1; <---- too... slow... (Array)
- }
- Delay: 2705 ms
- --------------------------------------
- for(i = 99999; i >= 0; i--){
- array[i] = 1; <---- Best (Array)
- }
- Delay: 21 ms
- --------------------------------------
- list = ds_list_create();
- for(i = 0; i < 99999; i++){
- ds_list_add(list, 1); <---- Best (List)
- }
- Delay: 26 ms
- --------------------------------------
- list = ds_list_create();
- for(i = 0; i < 99999; i++){
- list[| i] = 1; <---- Slow.... Lol? (List)
- }
- Delay: 1868 ms
- --------------------------------------
- map = ds_map_create();
- for(i = 0; i < 99999; i++){
- ds_map_add(map, i, 1); <---- so-so (Map)
- }
- Delay: 127 ms
- --------------------------------------
- map = ds_map_create();
- for(i = 0; i < 99999; i++){
- map[? i] = 1; <---- so-so (Map)
- }
- Delay: 135 ms
- --------------------------------------
- list = ds_list_create();
- repeat(99999){
- ds_list_add(list, 1); <---- Best (List) (small bonus with repeat)
- }
- Delay: 16 ms
- --------------------------------------
- ==============================Replacing==============================
- --------------------------------------
- for(i = 0; i < 99999; i++){
- array[i] = 2; <--- Best (Array)
- }
- Delay: 20 ms
- --------------------------------------
- for(i = 99999; i >= 0; i--){
- array[i] = 2; <--- Best (Array)
- }
- Delay: 21 ms
- --------------------------------------
- for(i = 0; i < 99999; i++){
- ds_list_replace(list, i, 2); <--- Very Good (List)
- }
- Delay: 25 ms
- --------------------------------------
- for(i = 0; i < 99999; i++){
- list[| i] = 2; <--- Very Good (List)
- }
- Delay: 24 ms
- --------------------------------------
- for(i = 0; i < 99999; i++){
- ds_map_replace(map, i, 2); <--- so-so (map)
- }
- Delay: 93 ms
- --------------------------------------
- for(i = 0; i < 99999; i++){
- map[? i] = 2; <--- so-so (map)
- }
- Delay: 124 ms
- --------------------------------------
- ==============================Access==============================
- --------------------------------------
- for(i = 0; i < 99999; i++){
- a = array[i]; <---- Best(Array)
- }
- Delay: 21 ms
- --------------------------------------
- for(i = 99999; i >= 0; i--){
- a = array[i]; <---- Best(Array)
- }
- Delay: 21 ms
- --------------------------------------
- for(i = 0; i < 99999; i++){
- a = ds_list_find_value(list, i); <--- Very Good (List)
- }
- Delay: 24 ms
- --------------------------------------
- for(i = 99999; i >= 0; i--){
- a = list[| i]; <--- Very Good (List)
- }
- Delay: 24 ms;
- --------------------------------------
- for(i = 0; i < 99999; i++){
- a = ds_map_find_value(map, i); <--- so-so (Map)
- }
- Delay: 86 ms
- --------------------------------------
- for(i = 0; i < 99999; i++){
- a = map[? i]; <--- so-so (Map)
- }
- Delay: 93 ms;
- --------------------------------------
Ganz im Herz kann ich euch List und Array (wenn man ihn auch richtig benutzt.) empfehlen.
Wobei ich List doch viel mehr empfehle aufgrund der erweiterte funktionen.
Viel Spaß damit.
[Edit:]
Blöde Forum, der hat meine Textabstand runiert.
Array 2D vs. Grid
Ich kann "99999" x "99999" nicht nehmen, da Array Limit an 32000x32000 begrenzt ist und bei ds_grid wird dann mein Arbeitsspeicher voll.
Nur ein kleiner Test:
Array konnte ich problemlos 10000x10000 erstellen. (bei 30000x30000 kam "Out of Memory").
bei DS-Grid habe ich problem bei 10000x10000 (Out of Memory)
Ich habe erstmal ein Test mit "1000x1000" gemacht, damit es auf beiden geht.
Wie ich sehe, ist Array wesentlich schneller. Wenn man aber die spezielle Funktion von ds_grid benutzt, ist dann ds_grid schneller, viel schneller als array.
GML-Quellcode
- //---2D-Array---
- //Create/Edition
- for(i = 1000; i >= 0; i--)
- {
- for(j = 1000; j >= 0; j--)
- {
- array[i,j] = 1;
- }
- }
- Delay: 291 ms
- //Replacing
- for(i = 1000; i >= 0; i--)
- {
- for(j = 1000; j >= 0; j--)
- {
- array[i,j] = 2;
- }
- }
- Delay: 283 ms
- //Access
- for(i = 1000; i >= 0; i--)
- {
- for(j = 1000; j >= 0; j--)
- {
- a = array[i,j];
- }
- }
- Delay: 287 ms
- //---ds_grid---
- //Create/Edition
- grid=ds_grid_create(1000, 1000);
- for(i = 1000; i >= 0; i--)
- {
- for(j = 1000; j >= 0; j--)
- {
- ds_grid_set(grid, i, j, 1);
- }
- }
- Delay: 376 ms
- //Replacing
- for(i = 1000; i >= 0; i--)
- {
- for(j = 1000; j >= 0; j--)
- {
- ds_grid_set(grid, i, j, 2);
- }
- }
- Delay: 395 ms
- //Access
- for(i = 1000; i >= 0; i--)
- {
- for(j = 1000; j >= 0; j--)
- {
- a = ds_grid_get(grid, i, j);
- }
- }
- Delay: 304 ms
- /// Bonus für Grid
- //Access (Summiere den gesamte Grid, ds_grid_get_sum)
- sum = ds_grid_get_sum(grid, 0, 0, 1000, 1000);
- Delay: 7 ms
- //Creation (ds_grid_set_region)
- grid=ds_grid_create(1000, 1000);
- ds_grid_set_region(grid, 0, 0, 1000, 1000, 2);
- Delay: 25 ms
- //Replacing (ds_grid_set_region)
- ds_grid_set_region(grid, 0, 0, 1000, 1000, 3);
- Delay: 15 ms
Ihr könnt selber die Performance testen, indem ihr dieser Skript benutzt:
GML-Quellcode
Ihr stinkt.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Chinafreak ()