Skocz do zawartości

Usuwanie ds_list, czy to konieczne?


nowy_user
Przejdź do rozwiązania Rozwiązane przez gnysek,

Rekomendowane odpowiedzi

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!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
  • Rozwiązanie

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.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie 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ę poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...