Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 快速占用CPU_Arrays_Swift_Sprite Kit_Cpu Usage - Fatal编程技术网

Arrays 快速占用CPU

Arrays 快速占用CPU,arrays,swift,sprite-kit,cpu-usage,Arrays,Swift,Sprite Kit,Cpu Usage,我在测试后台对象的执行,它只是一个数组中的几十个SKSpriteNodes,从屏幕底部向上移动,然后从屏幕顶部向上移动。它们也在正弦波上水平移动。我将节点存储在backNodeArray中,并将其当前水平速度存储在backHorSpeedArray:[Float]中 当第一个节点出现在屏幕上时,iPhone4S上的CPU利用率达到100%,并且在任何给定时刻,当该数量或多或少稳定在大约25个节点时,FPS已经低于35 我用时间分析器检查了hogs,发现单行代码占用了超过55%的执行时间 over

我在测试后台对象的执行,它只是一个数组中的几十个SKSpriteNodes,从屏幕底部向上移动,然后从屏幕顶部向上移动。它们也在正弦波上水平移动。我将节点存储在backNodeArray中,并将其当前水平速度存储在backHorSpeedArray:[Float]中

当第一个节点出现在屏幕上时,iPhone4S上的CPU利用率达到100%,并且在任何给定时刻,当该数量或多或少稳定在大约25个节点时,FPS已经低于35

我用时间分析器检查了hogs,发现单行代码占用了超过55%的执行时间

override func update(currentTime: CFTimeInterval) {
    else if (state == 1) {
        if (self.backNodeArray.count > 0) {
            for i in 0...self.backNodeArray.count-1 {
                self.backHorSpeedArray[i]++;
            }
        }
    }
}
基本上,每次调用update函数时,self.backHorSpeedArray中的每个项都会递增,这将占用一半以上的执行时间

当该行被注释掉时,CPU永远不会达到100%,FPS为60,没有振荡


这是怎么回事?我可以用一个变量来记忆自游戏开始以来的步数,然后在需要时从数组中添加“只读”值,这可能会解决性能问题,但为什么这会占用大量CPU?

将计数存储在int中,并将数组缓存在本地变量中。这将减少每次迭代获取属性的一些开销。我不明白的是,它如何计算position.x,在后台为每个节点使用sin和division,但不能将数组的成员增加1。。。