Zmniejsz zużycie pamięci

Gdy zrozumiesz, jak działa zarządzanie pamięcią w Androidzie, i skonfigurujesz narzędzia do pomiaru wykorzystania pamięci przez grę, następnym krokiem będzie aktywne zmniejszanie i optymalizowanie jej. Przestrzeganie ścisłych limitów Androida pomaga zapobiegać zamykaniu gry przez system, skracać długi czas uruchamiania i zapewniać prawidłowe działanie gry na wszystkich urządzeniach.

W tym przewodniku znajdziesz praktyczne metody zmniejszania wykorzystania pamięci przez grę. Skupiamy się w nim na optymalizacji na poziomie zasobów, konfiguracjach specyficznych dla silnika i sprawdzonych metodach zarządzania pamięcią.

Zmniejszanie zużycia pamięci w Unity

Ze względu na architekturę Unity, gdy alokatory bloków natywnych i zarządzany stóg się rozszerzają, silnik ma tendencję do zachowywania tych stron pamięci do ponownego użycia, zamiast natychmiast zwracać je do systemu operacyjnego, nawet po zwolnieniu zasobów. W szczególności wirtualna przestrzeń adresowa (pamięć zarezerwowana) pozostaje zarezerwowana przez cały czas trwania procesu, a pamięć fizyczna (RSS) nie jest odzyskiwana od razu, dopóki nie nastąpi kilka cykli odśmiecania pamięci i przycinania. W rezultacie tymczasowy szczyt wykorzystania pamięci może spowodować, że pamięć rezydentna pozostanie powiększona przez długi czas, nawet po spadku rzeczywistego wykorzystania. Takie zachowanie zwiększa ryzyko awarii z powodu braku pamięci na urządzeniach z niższej półki i pogarsza ogólną stabilność środowiska wykonawczego.

Dlatego optymalizację pamięci w Unity należy przeprowadzać w oparciu o 3 główne filary dostosowane do tych zachowań silnika:

  • Kontroluj aktywne wykorzystanie pamięci, aby zapobiegać szczytowym wzrostom wykorzystania pamięci.
  • Zarządzaj formatami tekstur i wariantami shaderów, aby nie tworzyć instancji niepotrzebnych zasobów i zasobów natywnych.
  • Refaktoryzuj struktury kodu środowiska wykonawczego, aby wyeliminować niepotrzebne alokacje w zarządzanej stercie, co pozwoli zminimalizować częstotliwość czyszczenia pamięci i rozszerzanie sterty.

Więcej informacji znajdziesz w artykule Optymalizacja pamięci w Unity.