Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Использование профилировщика ObjectDB
Начиная с Godot 4.6, в нижней панели отладчика появилась новая вкладка ObjectDB Profiler. Этот профилировщик позволяет делать снимки текущего состояния ObjectDB — базы данных, содержащей все классы, производные от Object, выделенные в памяти в данный момент. Это полезно для выявления утечек памяти и понимания использования памяти вашим проектом.
Кроме того, этот инструмент способен визуализировать различия между двумя снимками. Это можно использовать для выявления улучшений или регрессий в использовании памяти после внесения изменений в проект. Сокращение использования памяти может привести к повышению производительности даже в тех случаях, когда память не является узким местом. Уменьшая использование памяти, вы можете выполнять меньше выделений, что может быть дорогостоящей операцией, особенно если она выполняется в больших объёмах во время игры.
См. также
См. Когда и как избежать использования узлов для всего для получения информации об использовании более лёгких альтернатив узлам, что может помочь снизить использование памяти в вашем проекте.
Предупреждение
Профилировщик ObjectDB не отслеживает каждый бит памяти, используемый движком или внешними библиотеками. Нативные классы движка, не предоставляемые через API скриптов, не будут отображаться в снимках.
Рассмотрите возможность использования внешних инструментов профилирования памяти, если вам нужен доступ к этой информации.
Использование
Откройте вкладку ObjectDB Profiler в нижней панели . Вы попадёте на страницу сводки, где ещё не сделано ни одного снимка.
Сводка профилировщика ObjectDB без сделанных снимков
Запустите проект, затем перейдите в точку, где вы хотите сделать снимок (например, после загрузки уровня). Нажмите , чтобы сделать снимок в текущий момент времени. Если кнопка неактивна, убедитесь, что проект сначала запущен.
Сводка профилировщика ObjectDB с одним сделанным снимком
Вы можете сделать несколько снимков за один запуск проекта. Кроме того, вы можете щёлкнуть правой кнопкой мыши по снимку в списке, чтобы переименовать его, показать в файловом менеджере или удалить.
Совет
Хорошей идеей будет переименовывать снимки после их создания, давая им описательные имена (например, before_optimization, after_optimization). Независимо от имени, дата создания снимка сохраняется в самом файле снимка.
Файлы снимков имеют расширение .odb_snapshot и находятся в user://objectdb_snapshots/ (см. подробности Пути к данным). Их можно безопасно копировать между устройствами, так как они не зависят от платформы.
Просмотр различий между снимками
После создания как минимум двух снимков становится доступным раскрывающийся список . Здесь вы можете выбрать другой снимок для сравнения с текущим выбранным.
Раскрывающийся список Diff Against в левом нижнем углу профилировщика ObjectDB
Затем страница сводки покажет различия между двумя снимками:
Два снимка сравниваются на вкладке Сводка
Это также относится ко всем остальным вкладкам профилировщика ObjectDB, которые будут показывать различия между двумя снимками в дополнительных столбцах.
Классы
На вкладке Classes вы можете увидеть, сколько экземпляров каждого класса было создано в момент создания снимка:
Один снимок просматривается на вкладке Classes
В режиме сравнения он показывает количество экземпляров класса для текущего выбранного снимка (столбец A) и снимка, с которым сравнивается (столбец B). Также в столбце Delta показывается разница в количестве экземпляров.
Два снимка сравниваются на вкладке Classes. Здесь столбец A — это second_session, столбец B — first_session
Вы можете щёлкнуть по классу в списке справа, чтобы просмотреть его в инспекторе.
Выбранный экземпляр класса просматривается в инспекторе
Совет
Предварительный просмотр экземпляров в инспекторе также доступен на других вкладках (Nodes, Objects и RefCounted).
Объекты
Вкладка Objects похожа, но отличается способом представления данных. Здесь каждый экземпляр перечислен линейно, а не сгруппирован по классам. При выборе объекта справа вы увидите список других объектов, на которые он ссылается (), а также список объектов, которые ссылаются на него ().
Это позволяет просматривать объекты либо "сверху вниз" (просмотр объектов, на которые ссылается данный объект), либо "снизу вверх" (просмотр объектов, которые ссылаются на данный объект).
Вкладка Objects используется для просмотра объектов "сверху вниз"
На изображении выше щелчок по объекту default_font в списке переключит вид на перспективу этого объекта. На этот объект также ссылается множество других объектов, что фактически переключает на перспективу "снизу вверх".
Вкладка Objects используется для просмотра объектов "снизу вверх"
Узлы
Далее, вкладка Nodes показывает дерево сцены на момент создания снимка.
Вкладка Nodes используется для просмотра дерева сцены
Эта вкладка особенно интересна в режиме сравнения, поскольку она поддерживает более наглядное отображение различий между двумя снимками. Когда флажок снят, вы можете видеть различия рядом друг с другом.
Раздельный режим сравнения на вкладке Nodes
Когда флажок установлен, вы можете видеть различия, объединённые в одно дерево, где добавленные узлы выделены зелёным, а удалённые — красным.
Объединённый режим сравнения на вкладке Nodes
Кроме того, вы можете просмотреть список осиротевших узлов (узлов, не присоединённых к корню дерева сцены) в конце представления дерева. Вы можете просмотреть его легче, свернув корневой узел, так как они перечислены вне основного дерева сцены.
Осиротевшие узлы в конце дерева узлов в профилировщике ObjectDB
RefCounted
Последняя вкладка — RefCounted. Эта вкладка похожа на Objects, но в ней непосредственно в таблице отображаются счётчики ссылок классов, производных от RefCounted. Таблица имеет четыре столбца:
Native Refs: Количество ссылок на объект со стороны движка.
ObjectDB Refs: Количество ссылок на объект из ObjectDB.
Total Refs: Сумма ссылок движка и ObjectDB.
ObjectDB Cycles: Количество обнаруженных циклических ссылок.
В режиме сравнения снимок B всегда перечисляется над снимком A, если экземпляр RefCounted существует в обоих снимках.
Список справа показывает подробности о выбранном экземпляре, включая список ссылок и информацию о том, являются ли они дубликатами.
Вкладка RefCounted используется для просмотра экземпляров RefCounted
Примечание
Вкладка RefCounted не перечисляет объекты, которые непосредственно наследуются от Object, так как они не используют подсчёт ссылок.