Skocz do zawartości
  • 0
nowy_user

Usuwanie ds_list, czy to konieczne?

Pytanie

Witajcie drodzy użytkownicy,

 

Zaczynam się zapoznawać z koncepcją ds_list oraz ds_grid i nurtuje mnie jedno pytanie. Skoro ds_list jest bardzo podobna do jedno-wymiarowej tablicy zmiennej, a ds_grid do dwu-wymiarowej tablicy zmiennej, to dlaczego, w przypadku tablic nikt się nie przejmuje tym, ile to "pożera" pamięci, natomiast w przypadku ds_list i ds_grid  kładzie się taki duży nacisk na to, aby usuwać listy, gdy się z nich nie korzysta, żeby zwolnić zasoby?

 

Czy naprawdę jest taka duża różnica w wykorzystaniu RAMu, między użyciem takiego kodu:

properties[3] = "Orange";
properties[2] = "Green";
properties[1] = "Red";
properties[0] = "Blue";

a takiego: ?

 

properties = ds_list_create();
ds_list_add(properties, "Blue");
ds_list_add(properties, "Red");
ds_list_add(properties, "Green");
ds_list_add(properties, "Orange");

 

To tylko różnica jednej linijki kodu, skąd więc zatem obawy związane z "memory leaks" itd? Czy naprawdę jest tak, że nie usuwając listy narażamy się na niższy FPS? Czy ktoś bardziej ogarnięty mógłby mi wyjaśnić, dlaczego tak się dzieje?

 

Dziękuję i pozdrawiam!

nowy!

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Tablice GM usuwa automatycznie, gdy znika obiekt/referencja w kodzie. A list nie (ale kiedyś mają to zmienić). Dlatego tablicami nie ma sie co martwić, bo one się kasują z pamięci, a wszystkie ds_xxx trzeba ręcznie.

  • Lubię (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Ok, czyli na dobrą sprawę, wystarczy, że ustawimy sobie w danym obiekcie tworzącym listę, w Evencie Destroy: ds_list_destroy(id) i wtedy nie musimy się niczym przejmować. Dzięki za odpowiedź.

 

Pozdro! Nowy!

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
50 minut temu, nowy_user napisał:

Ok, czyli na dobrą sprawę, wystarczy, że ustawimy sobie w danym obiekcie tworzącym listę, w Evencie Destroy: ds_list_destroy(id) i wtedy nie musimy się niczym przejmować. Dzięki za odpowiedź.

 

Pozdro! Nowy!

Jeśli masz GMS2, to lepiej event clean, on się wykona też na deaktywowanych obiektach, oraz gdy zmienia się room, a Destroy wykonuje się tylko jak używasz instance_destroy() - czyliw GMS1 musisz bardziej zadbać o czyszczenie (dodawać ds_mapy w obiekcie, który ma event "room end" i generalnie nie znika).
Zarządzanie ds_xxx nie jest wciąż łatwe, chociaż istnieją już z 10 lat.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Niestety mam tylko GMS 1.4, choć może niebawem przerzucę się na GMS2.  Z tego co piszesz , to rzeczywiście trochę trzeba się nagimnastykować żeby używać ds_list bez uszczerbku na wydajności apki, ale z drugiej strony, możliwość sortowania, i co ważniejsze, brak konieczności wcześniejszego zadeklarowania, jak duża będzie twoja lista ( czego nie masz niestety przy tablicach) jest bardzo kusząca. Potestuję, i zobaczę co będzie lepsze dla mojego projektu, listy czy tablice.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Ja ds_list i ds_map używam raczej, jako globalnych zmiennych. A jak chcę posortować coś, to robie skrypt który tworzy ds_mapę, sortuje i usuwa.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×