nowy_user Opublikowano 20 Grudnia 2018 Udostępnij Opublikowano 20 Grudnia 2018 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 Więcej opcji udostępniania...
Administratorzy Rozwiązanie gnysek Opublikowano 20 Grudnia 2018 Administratorzy Rozwiązanie Udostępnij Opublikowano 20 Grudnia 2018 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. nowy_user 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nowy_user Opublikowano 20 Grudnia 2018 Autor Udostępnij Opublikowano 20 Grudnia 2018 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! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Grudnia 2018 Administratorzy Udostępnij Opublikowano 20 Grudnia 2018 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 Więcej opcji udostępniania...
nowy_user Opublikowano 20 Grudnia 2018 Autor Udostępnij Opublikowano 20 Grudnia 2018 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Grudnia 2018 Administratorzy Udostępnij Opublikowano 20 Grudnia 2018 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę