Отслеживание распределения мусора
Unity имеет следующие инструменты для отслеживания выделения памяти:
- Модуль CPU Использование Profiler Модуль: Предоставляет подробную информацию о распределении мусора на кадр.
- Модуль памяти Profiler: Предоставляет высокоуровневую информацию об использовании памяти кадр за кадром.
- Пакет Memory Profiler: Отдельный пакет Unity, который предоставляет подробную информацию об использовании памяти в определенные моменты времени во время работы приложения.
Отслеживание распределений с помощью модуля использования CPU
Чтобы отслеживать выделения сбора мусора с помощью модуля CPU Использование Profiler, выполните следующие действия:
- Откройте окно Profiler (Окно > Анализ > Profiler).
- Соберите некоторые данные о производительности.
- Выберите кадр в модуле CPU Использование Profiler.
- В области сведений о модуле откройте представление Hierarchyи осмотрите столбец GC.Alloc.
В столбце GC.Alloc отображается количество байт, которые Unity выделил на управляемой куче для выбранного кадра и потока.
Выделения могут происходить на всех потоках, поэтому вы можете использовать выпадающее меню выбора потока, чтобы проверить другие потоки, помимо главного потока. Вы также можете использовать Timeline вид и следить за образцами GC.Alloc, которые окрашены ярким пурпурным цветом.
Совет: Используйте режим Стек вызовов, чтобы включить полный трасс стека вызовов для образцов GC.Alloc. Стек вызовов дает вам точные детали о том, где сборщик мусора сделал распределение без необходимости использовать режим Глубокого профилирования, который может повлиять на производительность.
Отслеживание выделений с помощью модуля памяти
Вы можете использовать модуль Память Profiler для отслеживания выделения памяти для сбора мусора, но он предоставляет только общее представление на высоком уровне о том, где Unity выделил память. Для подробной информации об использовании памяти в вашем приложении, используйте пакет Память Profiler.
Чтобы отслеживать выделения памяти для сбора мусора с помощью модуля Память Profiler, выполните следующие действия:
- Откройте окно Profiler (Окно > Анализ > Profiler).
- Соберите некоторые данные о производительности.
- Выберите кадр в модуле Memory Profiler.
- В области сведений о модуле проверьте статистику GC, выделенную в кадре.
Статистика Managed Heap отображает количество памяти, которой управлял сборщик мусора, и включает память, которую Unity мог выделить и повторно использовать в последующих кадрах. Это означает, что сумма выборок GC.Alloc по всем кадрам не дает общего количества управляемой памяти, увеличившейся за это время.
Статистика GC выделенная в кадре отображает количество памяти, которое было выделено в этом кадре. Это количество может быть выше, чем количество памяти, отображаемое модулем CPU Usage в столбце GC.Alloc представления Hierarchy. Это происходит потому, что статистика GC.Alloc включает выделения, сделанные по всем потокам, а также в образцах только для редактораили как часть EditorLoop. Представление Hierarchy отображает только один поток за раз и скрывает выделения, сделанные в образцах только для редактора по умолчанию, и сворачивает код, выполняемый как часть EditorLoop, если только профилер не нацелен на редактор, а не на режим воспроизведения.
Важно: Чтобы получить наиболее точную информацию, профилируйте ваше приложение на сборке разработки на целевой платформе или устройстве, для которого вы хотите компилировать. Unity Editor работает иначе, чем сборка, и это влияет на данные профилирования. Например, метод GetComponent всегда выделяет память, когда он выполняется в Редакторе, но не в компилированном проекте.
Дополнительные ресурсы
- Введение управляемой памяти
- Введение мусоросборщика
- Сбор данных о производительности
- Память Profiler пакет