Każdy komponent budowania i skryptowania, który dodajesz do swojego doświadczenia, zużywa pamięć.Gdy zużycie pamięci osiągnie limity silnika, urządzenie lub serwer użytkownika może ulec awarii, więc musisz aktywnie monitorować zużycie pamięci i podejmować działania optymalizacyjne. Konsola programisty zapewnia dwa narzędzia do monitorowania zużycia pamięci, w tym:
Pamięć — Wyświetlaj zużycie pamięci w czasie rzeczywistym przez kategorie użytkowe, w tym zużycie pamięci przez twoje niestandardowe komponenty i procesy wewnętrzne silnika.
Wysyp Luau — Twórz zdjęcia z pamięci wysypu, które odnoszą się do alokacji pamięci dla twoich skryptów.To narzędzie zapewnia różne widoki przypisania pamięci, aby pomóc ci zidentyfikować obecne przypisanie pamięci i problemy z różnych perspektyw, takich jak rodzaje obiektów i klasy silnika.Umożliwia także tworzenie wielu punktów zapisu, aby porównać różnice w zużyciu pamięci z czasem.
Możesz otworzyć konsolę podczas sesji testowej lub doświadczenia na żywo za pomocą jednego z poniższych sposobów:
- Naciśnij F9.
- Wpisz /console do czatu.
- Użyj menu w doświadczeniu:
Otwórz menu w doświadczeniu Roblox .
Wybierz zakładkę Ustawienia .
Przewiń w dół do Konsoli programisty i kliknij Otwórz .
Pamięć
Narzędzie Pamięć kategoryzuje i wyświetla zużycie pamięci w czasie rzeczywistym.Wyświetla zużycie pamięci w MB każdej kategorii i generuje wykres zmiany zużycia z czasem.
Aby wyświetlić alokację pamięci:
Otwórz konsolę Dewelopera .
Rozszerz menu rozwijane narzędzi, aby wybrać Pamięć .
Rozszerz menu rozwijane kliencko-serwerowe, aby wybrać klienta lub serwera .
Przeglądaj kategorie i przedmioty zużycia pamięci.Dla kategorii lub przedmiotów, które chcesz zobaczyć wzór użycia nadgodzinowego, rozszerz kategorię, aby wyświetlić wykres.
Pamięć podstawowa — Wykorzystanie pamięci przez procesy budowania rdzenia silnika, w tym sieć, awatary i elementy interfejsu graficznego, nad którymi nie masz bezpośredniej kontroli.
Miejsce pamięci — wykorzystanie pamięci w oparciu o to, jak budujesz swoje doświadczenie, w tym modele, teren, części, skrypty i wszystkie inne niestandardowe elementy, które dodajesz do swojego doświadczenia.
Odniesienie do pamięci miejscaKategoria Opis HttpCache Zasoby (obrazy, siatki itp.) załadowane z serwerów Roblox i obecnie przechowywane w pamięci w pamięci. Instancje Instances na miejsce. sygnały sygnały, które strzelają między instancjami (wydarzenie wystrzeliwane na jednej instancji, aby uruchomić wydarzenie na innej instancji). Zbiór Lua Pamięć w stosie dla obu skryptów głównych (skryptów dostarczanych z klientem Roblox) oraz niestandardowych skryptów. Skrypt Skrypty Luau. Kolizja fizyczna Dane kolizyjne dla symulacji fizycznych. Części fizyczne Geometria fizyczna i kinetyka. Modele graficzne solidne Dane graficzne do renderowania solidnych modeli. Graficzne części siatki Grafika dla obiektów MeshPart . Cząstki graficzne Grafika dla systemów cząstek. Graficzne części Grafika dla części. Graficzny SpatialHash Ogólne renderowanie. Teren graficzny Grafika dla terenu. Tekstura grafiki Pamięć tekstury. Postać tekstury graficznej Pamięć tekstury dla postaci. Dźwięki Dźwięki w pamięci. Dźwięki strumieniowe Dźwięki strumieniowe. Voxele terenu Terenowe woxele. Fizyka terenu Fizyka terenu. Gui Pamięć używana przez zwykłe elementy interfejsu GUI. Animacja Pamięć używana do danych animacji, takich jak pozy i KeyframeSequence dane zapamiętane w pamięci podręcznej dla animacji awatara. Nawigacja Pamięć używana przez struktury wspierające dla PathfindingService . Niewykryta pamięć — alokacje pamięci, których system nie może łatwo przypisać do konkretnego kod źródłowy.
Pamięć skryptu miejscowego — zużycie pamięci twoich skryptów z wglądem w to, jak poszczególne skrypty i niestandardowe tagi pamięci przyczyniają się do ogólnego zużycia pamięci.
Pamięć CoreScriptMemory — Wykorzystanie pamięci przez wewnętrzne skrypty silnika, nad którymi nie masz bezpośredniej kontroli.
Wśród tych kategorii Pamięć miejsca i Pamięć skryptu są najważniejsze dla optymalizacji wydajności, ponieważ pomagają zrozumieć, w jaki sposób twoje wybory budowania i skryptowania wpływają na zużycie pamięci i potencjalne obszary optymalizacji.Aby uzyskać więcej wglądów w miejsce pamięci skryptu , możesz użyć narzędzia Luau heap, aby tworzyć przekroje i analizować alokację pamięci za pomocą różnych metryk.
Kopalnia Luau
Narzędzie Luau heap pozwala na tworzenie zdjęć z obecną alokacją pamięci w stosie, która odnosi się do alokacji pamięci dla skryptów Luau do przechowywania zmiennych, tabel, funkcji i innych struktur danych czasu wykonania.To narzędzie zapewnia różne widoki przypisania pamięci, aby pomóc ci zidentyfikować przypisanie pamięci i problemy z różnych perspektyw, takich jak rodzaje obiektów i klasy silnika.Umożliwia także tworzenie wielu punktów zapisu, aby porównać różnice w zużyciu pamięci z czasem.
Twórz zdjęcia przekrojowe
Aby utworzyć zapis obrazu przypisania pamięci:
Otwórz konsolę Dewelopera .
Rozszerz menu rozwijane narzędzi, aby wybrać LuauHeap .
Rozszerz menu rozwijane kliencko-serwerowe, aby wybrać klienta lub serwera .
Kliknij przycisk Utwórz kopię zapasową .
Analizuj użycie pamięci
Narzędzie zapewnia pięć widoków, z których możesz wybierać, aby zobaczyć przypisanie pamięci Luau na podstawie różnych widoków:
- Grafika — Pokazuje zagregowany drzewo zużycia pamięci z każdym węzłem reprezentującym obiekt z przypisaną pamięcią
- Tagi obiektów — Pokazuje rozmiary pamięci i liczby przez typy wykonywania, takie jak function , table i thread.
- Kategorie pamięci — Pokazuje rozmiary pamięci i liczbę kategorii pamięci przypisanych przez silnik.Silnik przypisuje kategorię pamięci do obiektu w czasie przydziału.
- Klasy obiektów — Pokazuje rozmiary pamięci i liczbę klas silników, których używają i przechowują swoje instancje, takie jak EnumItem , Animation , CFrame .
- Unikalne odniesienia — Pokazuje liczbę i całkowitą liczbę instancji, które nie mają rodzica w modelu danych i są dostępne tylko przez skrypty, wraz z wszystkimi ścieżkami, które przypinają obiekt instancji.
Grafika
Widok Grafy jest najbardziej szczegółowym i złożonym widokiem wśród wszystkich widoków stosu Luau.Pokazuje zagregowany drzewo zużycia pamięci z każdym węzłem reprezentującym obiekt z przypisaną pamięcią.Drzewo pokazuje, w jaki sposób obiekty łączą się ze sobą i wyznacza najkrótszą ścieżkę między odniesieniami obiektów.Ma następujące kolumny rozmiaru pamięci: Rozmiar — Samo zużycie pamięci plus zużycie pamięci przez zawartość w strukturze danych.Samodzielny — Pamięć bezpośrednio przydzielona dla samej struktury danych, wykluczając zużycie pamięci przez jakikolwiek zawarty w niej kontent.

Korzeń grafu drzewa jest registry, który przechowuje wszystkie odniesienia silnika i Luau, takie jak funkcje połączone z sygnałami lub biblioteką zadań, tabele powracane przez skrypty modułowe i globalne funkcje, tabele i klasy.Zazwyczaj rodzicuje następujące wspólne wpisy:
- Module @Path.To.Module to jest tabela zwrócona przez skrypt modułu.
- name:123 =Path.To.Module jest funkcją wewnątrz określonego skryptu.Funkcje anonimowe nie mają nazw.Węzeł najwyższego poziomu często odnosi się do globalnej funkcji skryptu.Funkcje anonimowe nie mają nazw.Przykład: :1= Workspace.[Username].Animate .
- upvalue jest odniesieniem dla zarejestrowanych funkcji. Zobacz Zdobądź lokalny zakres dla więcej informacji.
- env odnosi się do środowiska funkcji. W większości przypadków jest to tabela reprezentująca globalny zakres skryptu.
- globals odnosi się do środowiska wątku.
- [key] reprezentuje obiekty, które służą jako klucze do tabeli.
- array reprezentuje array.
- stack odnosi się do matrycy, która przechowuje wszystkie lokalne funkcji.
- constants reprezentuje wszystkie stałe wartości, których używają funkcje.
Kategorie pamięci
Widok Kategorie pamięci pokazuje rozmiary pamięci i liczbę kategorii pamięci, które silnik przypisuje obiektom w czasie przydziału.Domyślnie kategoria pamięci ma taką samą nazwę jak skrypt, lub możesz przypisać niestandardowe nazwy kategorii pamięci za pomocą funkcji debug.setmemorycategory.
Unikalne odniesienia
Widok Unikalne odniesienia pokazuje zużycie pamięci instancji, które nie mają rodzica w modelu danych i są dostępne tylko przez skrypty, wraz z wszystkimi ścieżkami, które przypinają obiekt instancji.Ta wizualizacja ma dwie metryki:
- Liczba — Pokazuje liczbę instancji o tej samej nazwie, które można uzyskać z tej samej ścieżki, takich jak wiele instancji o nazwie Dragon w tej samej tabeli.
- Całkowita liczba instancji — Pokazuje całkowitą liczbę obiektów wewnątrz tych korzeni, takich jak wszystkie części, skrypty i obiekty dźwiękowe, które konstruują instancjaDragon.

Widok ten jest przydatny do identyfikacji niepotrzebnych połączonych instancji, które musisz odłączyć, gdy już ich nie potrzebujesz.Jeśli widzisz wiele nieoczekiwanych instancji w tym widoku, sprawdź ścieżki, które je przechowują, i oceń, czy są one niezbędne.