Назначение потоков несовместимо с iOS11/Spritekit/Physicsbody, что означает низкий FPS

Я запускал простую симуляцию SpriteKit с множеством тел (800) 2x2 пикселя, используя PhysicsWorld под iOS11/Swift4 — рудиментарную систему частиц.

Он содержит простой радиальный гравитационный узел с 800 объектами, вращающимися вокруг него без использования обнаружения столкновений или контактов.

На моем тестовом оборудовании iPhone6S — я был действительно впечатлен достижением 60 кадров в секунду и супер плавной симуляцией — что открывает путь для гораздо большего исследования.

Единственная проблема, с которой я столкнулся, заключается в том, что производительность действительно непоследовательна.

Если я переключу напряженность поля гравитационного узла на высокое значение в середине прогона (это означает, что объекты перемещаются намного быстрее) — примерно в 25% прогонов симуляция может получить 60 кадров в секунду без проблем, но в остальных 3 из 4 запусков частота кадров падает до 3-4FPS

Если я вернусь к низкой напряженности поля (более медленным движениям), то снова всегда будет 60 кадров в секунду.

Я профилировал в XCode - и вижу, что ИНОГДА 3 или 4 потока даются приложению, что дает 60FPS, но в других случаях задаче дается только один поток - что означает корявую производительность

Я экспериментировал с Grand Central Dispatch и приоритетами потоков - безрезультатно - в любом случае единственный код, который работает в каждом кадре, - это PhysicsWorld, я ничего не делаю кадр за кадром.

Любые идеи, как я могу получить стабильные 60 кадров в секунду — поскольку аппаратное обеспечение способно на это — но только тогда, когда мне захочется!

Дополнительное примечание: если устройство подключено к Mac разработчика / на зарядке / USB / с запущенным XCode и т. д. - производительность чаще бывает хорошей при всех используемых потоках. Но попытка того же самого приложения, скажем, на следующий день, работающего автономно на устройстве (не подключенном к машине разработчика) - почти всегда очень низкая производительность - ГЛАВНАЯ ГОЛОВНАЯ ЦАРКА!


person tetsuo    schedule 10.10.2017    source источник


Ответы (1)


Проблемы с производительностью, связанные с узлами, распространены при использовании физических тел. Если вы использовали физическое тело, используйте стандартные тела вместо пользовательских. Надеюсь это поможет.

person Arthur Macpherson    schedule 01.11.2017