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

Расчёт вынесли в джоб, но кадр не ускорился

Расчёт видимости пяти тысяч объектов вынесли из главного потока в джоб. Код выглядит так:

void Update()
{
    var job = new VisibilityJob { positions = _positions, results = _results };
    JobHandle handle = job.Schedule(_positions.Length, 64);
    handle.Complete();

    for (int i = 0; i < _results.Length; i++)
        _renderers[i].enabled = _results[i];
}

Замеры на устройстве показывают, что кадр практически не изменился. Что не так с этим подходом?

  • Джобы дают выигрыш только на данных в обычных классах: массивы структур для них не подходят, поэтому расчёт остался таким же дорогим, как был
  • Пять тысяч элементов — слишком мало: планирование стоит дороже самой работы, применять джобы имеет смысл начиная примерно с миллиона элементов
  • Complete надо вызывать из другого потока: тогда главный поток освободится и продолжит кадр, не дожидаясь окончания расчёта видимости
  • Complete сразу после Schedule превращает джоб в синхронный вызов: между ними нет работы, ради которой стоило распараллеливать

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

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

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

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