线程分配不一致iOS11/Spritekit/Physicsbody意义很低FPS

问题描述:

我一直在使用iOS11/Swift4下的PhysicsWorld(一个基本的粒子系统)运行一个简单的多体(800)2x2像素SpriteKit仿真。线程分配不一致iOS11/Spritekit/Physicsbody意义很低FPS

它包含一个简单的径向重力节点,其中有800个物体在没有碰撞或接触检测的情况下围绕它运行。

在我的测试硬件上,iPhone6S - 我对获得60FPS和超级平滑模拟印象深刻 - 这为更多探索打开了道路。

我一直遇到的唯一问题是性能确实不一致。

如果我将重力节点的场强转换为中间运行的高值(意思是物体移动快得多) - 在大约25%的运行中,模拟可以获得60FPS没有问题,但在另外3个4次运行,帧率下降到3-4FPS

如果我恢复到低场强(较慢的运动),那么它总是会再次获得60FPS。

我已经异形XCode中 - 并且可以看到,有时3个或4个线程被提供给应用程序,给60FPS,但其他时候只有一个线程被赋予的任务 - 这意味着劣质的性能

我曾尝试使用Grand Central Dispatch和线程优先级 - 无济于事 - 运行每个帧的唯一代码就是PhysicsWorld,无论如何我没有做框架。

任何想法如何我可以得到一致的60FPS - 显然硬件是有能力的 - 但只是当它感觉像!

附加说明:如果设备插入dev/Mac/on charge/USB/XCode正在运行等 - 所有线程的性能更好。但是,第二天尝试完全相同的应用程序,在设备上单独运行(不连接到开发机器) - 几乎总是非常差的性能 - 主要的头部攻击!

当使用物理体时,如果使用了物理体使用标准化体而不是定制体,那么节点的性能问题就很常见。希望这可以帮助。