Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Модуль профилировщика памяти

Есть два способа анализа использования памяти в вашем приложении в Unity:

  • Memory Profiler Этот встроенный модуль Profiler дает вам основную информацию о том, где ваше приложение использует память.
  • Пакет Memory Profiler: это отдельный пакет, который вы можете добавить в свой проект. Он добавляет в редактор Unity дополнительное окно Memory Profiler, которое затем можно использовать для более подробного анализа использования памяти в приложении. Вы можете сохранять и сравнивать моментальные снимки, чтобы упростить поиск утечек памяти, или просматривать структуру памяти, чтобы находить проблемы с фрагментацией памяти.

На этой странице содержится информация о встроенном модуле Memory Profiler. Дополнительные сведения о пакете профилировщика памяти см. в документации по профилировщику памяти.

Модуль Memory Profiler визуализирует счетчики, представляющие общий объем выделенной памяти в вашем приложении. Вы можете использовать модуль памяти для просмотра такой информации, как количество загруженных объектов и общий объем памяти, который они занимают по категориям. Вы также можете увидеть количество выделений GC на кадр Profiler.

При профилировании приложения в редакторе информация в модуле «Память» указывает на использование памяти в редакторе. Эти цифры, как правило, больше, чем при работе на платформе выпуска, потому что при работе редактора Unity используются определенные объекты, занимающие память, а само окно редактора использует дополнительную память. Кроме того, Profiler отображает используемую им память, поскольку Unity не может четко отделить ее от памяти, которую использует проигрыватель в режиме воспроизведения. Чтобы получить более точные цифры и данные об использовании памяти для вашего приложения, подключите Profiler к работающему проигрывателю через меню Присоединить к проигрывателю. Это позволяет вам увидеть фактическое использование на целевом устройстве.

Категории диаграммы

Модуль "Память" разделен на шесть диаграмм, отображающих подробную информацию о том, на что приложение расходует память. Вы можете изменить порядок категорий на диаграмме; для этого перетащите их в легенду диаграммы. Вы также можете щелкнуть цветную легенду категории, чтобы переключить ее отображение.

Категория Описание
Total Allocated Общая память, которую использовало ваше приложение.
Texture Memory Сколько памяти занимают текстурыизображение, используемое при рендеринге GameObject, Sprite, или элемент пользовательского интерфейса. Текстуры часто применяются к поверхности сетки, чтобы придать ей визуальную детализацию. Подробнее
См. Словарь
в вашем приложении.
MeshОсновной графический примитив Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. More info
See in Словарь
память
Сколько памяти использовали Meshes в вашем приложении.
Material Count Количество МатериалаАктива, определяющего способ визуализации поверхности. Подробнее
Просмотр в Словарь
в вашем приложении.
Object Count Количество экземпляров собственного объекта в вашем приложении.
GC Used Memory Объем памяти, используемый кучей GC.
GC Allocated in Frame Объем памяти, выделенный на кадр в куче сборщика мусора.

Панель сведений о модуле

На панели сведений о модуле, расположенной в нижней части окна Profiler, доступны два вида: Простой и Подробный. Чтобы изменить представление, выберите его в раскрывающемся списке в левом верхнем углу панели сведений о модуле.

Простой вид

В простом представлении отображается обзор того, как Unity использует память в режиме реального времени для каждого кадра.

Unity резервирует пулы памяти для выделения памяти, чтобы не слишком часто запрашивать память у операционной системы. Profiler показывает, сколько памяти зарезервировано и сколько использует Unity.

Представление модуля «Простая память»
Представление модуля «Простая память»

Эта информация также доступна через ProfilerRecorder API и в модуле Profiler. Редактор, чтобы вы могли добавить их в пользовательский модуль Profiler.

Статистика Описание Доступно в выпущенных проигрывателях
Total Used Memory Общий объем памяти, который использует и отслеживает Unity. Да
Total Reserved Memory Общая зарезервированная память, которую Unity использует для целей отслеживания и распределения пула. Да
GC Used Memory

GC Reserved Memory

Используемый размер кучи и общий размер кучи, используемый управляемым кодом. Эта память является сборщиком мусора. Да
Gfx Used Memory

Gfx Reserved Memory

Предполагаемый объем памяти, который драйвер использует для текстур, целей рендеринга, шейдеров и данных сетки.. Нет
Audio Used Memory

Audio Reserved Memory

Расчетное использование памяти аудиосистемой. Да
Video Used Memory

Video Reserved Memory

Предполагаемое использование памяти видеосистемой Да
Profiler Used Memory

Profiler Reserved Memory

Память, которую функциональность Profiler использует и резервирует из системы. Да
System Used Memory Значения в Profiler отличаются от тех, которые отображаются в диспетчере задач вашей операционной системы, потому что Memory Profiler не отслеживает все использование памяти в вашей системе. Сюда входит память, используемая некоторыми драйверами и подключаемыми модулями, и память, используемая для исполняемого кода.

На платформах, поддерживающих получение общего объема памяти приложения из операционной системы, Использование системной памяти превышает 0 и имеет такой же размер в диспетчере задач.

Да
Texture Count

Texture Memory

Общее количество загруженных текстур и памяти, которую они используют. Нет
Mesh Count

Mesh Memory

Общее количество загруженных мешей и памяти, которую они используют. Нет
Material Count

Material Memory

Общее количество загруженных материалов и памяти, которую они используют. Нет
AnimationClip Count

AnimationClip Memory

Общее количество загруженных AnimationClips и используемой ими памяти. Нет
Asset Count Общее количество загруженных активов. Нет
GameObject Count Общее количество GameObjectосновного объекта в сценах Unity, которые могут представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Смотреть в Словарь
в sceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. More info
See in Словарь
.
Нет
Scene Object Count Общее количество динамических объектов UnityEngine.Object. Это число включает в себя счетчик игровых объектов, общее количество компонентов и все, что не является активом в сцене.. Нет
Object Count Общее количество собственных UnityEngine.Object, которые создает или загружает ваше приложение. Это число включает количество объектов сцены, а также общее количество всех ресурсов. Если это число со временем увеличивается, ваше приложение создает игровые объекты или другие активы и никогда не уничтожает и не выгружает их.. Нет
GC Allocation In Frame Count

GC Allocated In Frame

Количество управляемых выделений и их общий размер в байтах. Нет

Доступность в проигрывателях

Вы можете использовать ProfilerRecorder API для доступа к счетчикам модуля Memory Profiler в Players. В следующем примере содержится простой сценарий, который собирает метрики «Общая зарезервированная память», «Зарезервированная память GC» и «Используемая системой память» и отображает их в виде GUI.TextArea. Информация о модуле Memory Profiler относится к ProfilerCategory.Memory категория Profilerидентифицирует данные рабочей нагрузки для подсистемы Unity (например, рендеринг, категории «Сценарии» и «Анимация»). Unity применяет цветовое кодирование к категориям, чтобы визуально различать типы данных в окне Profiler.
См. в Словарь
.

using System.Text; using Unity.Profiling; using UnityEngine; public class MemoryStatsScript : MonoBehaviour { string statsText; ProfilerRecorder totalReservedMemoryRecorder; ProfilerRecorder gcReservedMemoryRecorder; ProfilerRecorder systemUsedMemoryRecorder; void OnEnable() { totalReservedMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "Total Reserved Memory"); gcReservedMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "GC Reserved Memory"); systemUsedMemoryRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Memory, "System Used Memory"); } void OnDisable() { totalReservedMemoryRecorder.Dispose(); gcReservedMemoryRecorder.Dispose(); systemUsedMemoryRecorder.Dispose(); } void Update() { var sb = new StringBuilder(500); if (totalReservedMemoryRecorder.Valid) sb.AppendLine($"Total Reserved Memory: {totalReservedMemoryRecorder.LastValue}"); if (gcReservedMemoryRecorder.Valid) sb.AppendLine($"GC Reserved Memory: {gcReservedMemoryRecorder.LastValue}"); if (systemUsedMemoryRecorder.Valid) sb.AppendLine($"System Used Memory: {systemUsedMemoryRecorder.LastValue}"); statsText = sb.ToString(); } void OnGUI() { GUI.TextArea(new Rect(10, 30, 250, 50), statsText); } }

На следующем снимке экрана показан результат добавления скрипта в Танки! учебный проект.

Танки! учебник с наложенной информацией о памяти
Танки! учебник с наложенной информацией о памяти

Эта информация доступна в Release Players, как и другие счетчики высокого уровня в таблице выше. Если вы хотите видеть выбранные счетчики памяти в пользовательском модуле в окне Profiler, используйте редактор модулей для настройки диаграммы.

Подробный просмотр

Представление Подробно предоставляет снимок текущего состояния вашего приложения. Нажмите кнопку Взять образец, чтобы получить подробную информацию об использовании памяти для текущего целевого объекта. Профилировщику требуется время, чтобы получить эти данные, поэтому представление Подробно не дает подробностей в реальном времени. После того, как Profiler возьмет образец, в окне Profiler отобразится список, в котором вы можете более подробно изучить использование памяти вашим приложением.

Детальный вид модуля памяти
Детальный вид модуля памяти

Включите параметр Собирать ссылки на объекты в верхней части панели сведений о модуле, чтобы собирать информацию о том, что ссылается на объект во время моментального снимка. Профилировщик отображает эту информацию в правой части окна.

Представление в виде списка делит объекты, использующие память, на следующие категории:

  • Другое: объекты, не являющиеся ни активами, ни игровыми объектами, ни компонентами. Сюда входит такая информация, как память, которую Unity использует для разных систем.
  • Не сохранено: объекты, помеченные как Не сохранять
  • Встроенные ресурсы: ресурсы редактора Unity или ресурсы Unity по умолчанию, такие как ShadersПрограмма, которая работает на графическом процессоре. Подробнее
    См. в Словарь
    , который вы добавили в Всегда включенные шейдеры список настроек графики.
  • Ресурсы. Ресурсы, на которые ссылается пользовательский или собственный код.
  • Память сцен: объекты и прикрепленные компоненты.

Когда вы щелкаете GameObject в списке Assets или Scene Memory, он выделяется в Project или Scene viewинтерактивном загляните в мир, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Дополнительная информация
См. в Словарь
.

Примечание. В категории Другое память, указанная в разделе System.ExecutableAndDlls, является памятью только для чтения. Операционная система может отбрасывать эти страницы по мере необходимости, а затем повторно загружать их из файловой системы. Это снижает использование памяти и обычно не влияет напрямую на решение операционной системы закрыть ваше приложение, если оно использует слишком много памяти. Некоторые из этих страниц могут также использоваться совместно с другими приложениями, использующими те же платформы.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3