Расчёт вынесли в джоб, но кадр не ускорился
Расчёт видимости пяти тысяч объектов вынесли из главного потока в джоб. Код выглядит так:
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 превращает джоб в синхронный вызов: между ними нет работы, ради которой стоило распараллеливать
