Вступить в клуб →
лёгкаявопросПрофилирование и оптимизация

Профайлер показывает выделение памяти каждый кадр: что в этом коде его создаёт

На боевом экране профайлер показывает выделение памяти в каждом кадре и регулярные короткие просадки примерно раз в несколько секунд. Подозрительный код:

void Update()
{
    scoreLabel.text = "Счёт: " + _score;
    GetComponent<Animator>().SetFloat("Speed", _speed);
}

Что здесь происходит?

  • Строки в C# неизменяемы и потому мусора при склейке не создают: выделения в кадре даёт только Animator
  • Счётчик выделений в профайлере показывает общий занятый объём, а не выделение за кадр, так что картина нормальная и просадки вызваны чем-то другим
  • Update вызывается слишком часто: обновление подписи и параметров аниматора надо перенести в FixedUpdate, где число вызовов в секунду фиксировано
  • Склейка строки создаёт новый объект каждый кадр, а компонент ищется заново: мусор копится, и его сборка даёт периодические просадки

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела