Пример безопасного линейного распределителя
Предварительные условия
В примерах используются отчеты об использовании памяти, которые Unity записывает в журнал при закрытии Проигрывателя или Unity Editor. Для создания этих отчетов используйте аргумент командной строки -log-memory-performance-stats. Чтобы найти файлы журнала проекта, следуйте инструкциям на странице файлов журнала.
Обзор распределителя
Этот распределитель выделяет блоки памяти, а затем линейно выделяет память внутри этих блоков. Unity содержит доступные блоки в пуле. Когда один блок заполнен, распределитель получает новый блок из пула. Когда распределитель больше не нуждается в памяти в блоке, он очищает блок, и блок возвращается в пул доступных блоков.
Вы можете настроить размер блока. Распределитель выделяет до 64 блоков, по мере необходимости.
Пример отчета об использовании
Если все блоки используются, или выделение слишком большое для блока, выделение возвращается к главному распределителю стека, который намного медленнее, чем распределитель заданий. Несколько выделений перегрузки в порядке: от 1 до 10 в кадре, или несколько сотен, особенно во время загрузки. Если количество перегрузки растет с каждым кадром, вы можете увеличить размер блока, чтобы избежать резервных выделений. Однако, если вы увеличите размер блока слишком много (например, чтобы соответствовать пику использования в событиях, таких как загрузка сцены), вы можете оставить большую часть памяти недоступной во время игры.
Например:
[ALLOC_TEMP_JOB_4_FRAMES (JobTemp)]
Initial Block Size 0.5 MB
Used Block Count 64
Overflow Count (too large) 0
Overflow Count (full) 50408
В этом примере отчета об использовании размер блока 0.5 MB был слишком мал, чтобы вместить память задания, необходимую приложению, и полный распределитель вызвал переполнение многих выделений.
Чтобы проверить, достаточно ли перегрузки кадров для вашей сборки, запустите ее в течение короткого времени, а затем в течение более длительного времени. Если число перегрузок остается постоянным, то перегрузка является высоким водяным знаком, который возникает во время загрузки. Если число перегрузок увеличивается при более длительном запуске, сборка обрабатывает перегрузку на кадр. В обоих случаях вы можете увеличить размер блока, чтобы уменьшить перегрузку, но перегрузка менее важна во время загрузки, чем на кадр.