📦 Memory Profiler - инструмент, который спасёт вашу игру от утечек памяти
Привет! Продолжаем тему оптимизаций и профилирования и сегодня разберём один из самых полезных инструментов в Unity - Memory Profiler.
Если у вас рандомные вылеты на мобилках, фризы при загрузке сцен или игра стабильно жрёт много RAM - этот инструмент вам поможет исправить ситуацию.
Что такое Memory Profiler и зачем он нужен
Memory Profiler - это пакет от Unity для анализа использования памяти. Он помогает:
• Видеть, что именно занимает RAM
• Отлавливать утечки
• Находить лишние текстуры, Mesh’и, аудио, коллекции
• Находить ассеты, которые не выгружаются
• Сравнивать состояние памяти в разные моменты игры
Как пользоваться Memory Profiler
Сначала установи пакет (на новых версиях Unity вшит по дефолту): Window → Package Manager → Memory Profiler → Install.
Открой: Window → Analysis → Memory Profiler.
1️⃣ Собери приложение на target устройство
У этого профайлера такого же сайд эффект, как у обычного - в Editor режиме будет профайлить сам себя.
Поэтому, собираем приложение на устройство.
2️⃣ Сделай срез памяти (snapshot)
Snapshot - фиксация текущего состояния памяти.
Snapshot хранятся на диске и их можно сравнивать между собой.
3️⃣Изучи информацию, используя разные режимы в Snapshot
Memory Profiler даёт несколько разных представлений памяти. Это ключ к тому, чтобы быстро понять, где проблема.
1. Summary (Обзор)
Самая верхнеуровневая картина. Сразу видно:
• Общий объём памяти
• Самые тяжёлые категории (Textures, Meshes, Audio, GC Heap)
• В каких областях память растёт
Это то, что открываешь первым, чтобы понять масштаб беды.
Здесь сразу можно увидеть "тяжёлые" ассеты и добавить им сжатия.
2. Objects and Allocations
Показывает объекты Unity (Texture2D, Mesh, AudioClip, GameObject, ScriptableObject) и чистые C# объекты.
Здесь обычно ищут:
• дубли текстур
• Mesh’и с Read/Write
• «вечные» ScriptableObject
• коллекции, которые растут без очистки
3. Native Memory
Память движка и нативных структур: Shader, ComputeBuffer, RenderTexture и т.д.
Именно здесь чаще всего «утекают»:
• RenderTexture
• Shader Variant Collection
• Compute буферы
• GPU ресурсы, которые не освобождаются
4. Managed Objects (GC Heap)
Память .NET среды.
Тут можно найти:
• Списки, которые растут
• Dictionary, которые не чистят
• Объекты, удерживаемые статическими ссылками
• Лямбды, оставшиеся в событиях
4️⃣ Проведи оптимизации
Увидел "тяжёлые" ассеты в проекте - добавь им сжатия
Обнаружил дубляж ассетов - проверяй их загрузку/выгрузку
Просто смотри что жрёт больше всего памяти и найди способы оптимизации веса таких объектов.
5️⃣ Сделай новый Snapshot и используй сравнение (Diff)
Diff - один из самых полезных режимов.
Сразу видно:
• улучшения памяти в сравнении с предыдущим snapshot
• что новое появилось в памяти
• какие ассеты загружаются повторно
• какой тип объектов растёт быстрее всего
Совет - куда обращать внимание, что чаще всего жрёт память
• Текстуры - особенно UI, PNG без компрессии, включённые Read/Write (часто у Азиатских шрифтов TMPro)
• AudioClip - оставленные в RAM WAV-ки
• Meshes - включённый Read/Write Enabled
• Addressables - загрузили, но не выгрузили
• Коллекции - растут и никто не чистит
🚀 Пост Guru Unity: @Minerope
Post #419
224

- 👍 1