我有这段代码,其中Shark告诉我这是一个性能瓶颈:
CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB;
所有这些值都是CGFloat。有没有更快的方法来确定哪一个更小并将其分配给shortestDistance?也许甚至通过引用而不是复制值?我该怎么做?以后如何访问?
不过,这是在非常紧密的循环中执行的代码。每秒约60次。答案 0 :(得分:10)
每秒60次不紧密循环。就现代计算机而言,这是非常放松的。
似乎没有一种明显的方法可以改善这种表达方式;你确定Shark表明确切的语句是一个问题,还是指出了经常被调用的代码的更普遍的问题?
答案 1 :(得分:7)
您可能遇到的问题是拇指/手臂FPU问题。 iPhone应用程序默认编译为 thumb ,这是常规ARM表达式的16位子集。在 thumb 模式下,使用整数例程完成浮点运算。您可以关闭它并提高浮点性能。请参阅“Break That Thumb For Best iPhone Performance”。
答案 2 :(得分:3)
distanceA
或distanceB
(或两者)是平方根的结果吗?鲨鱼追踪通常会归咎于消耗实际上很慢的操作结果的操作。你真的需要取两者的平方根,还是可以在平方距离上进行选择?
如果失败,(1)在定位ARMv6时关闭拇指,(2)使用__builtin_fminf(distanceA, distanceB)
。然后继续寻找应用中真正的瓶颈;每秒60次无需担心。
答案 3 :(得分:0)
从内存现代CPU有6到9个管道,甚至更可能是自我上次检查以来。一旦优化器达到目的,你通常认为重CPU的实际上很少。