我有這樣的一段代碼,其中鯊魚告訴我這是一個性能瓶頸:是否有更快的方法來比較兩個變量?
CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB;
所有這些值CGFloat的。有沒有更快的方法來找出哪一個更小,並將其分配給最短的距離?也許甚至通過引用而不是複製一個值?我該怎麼做,以後如何訪問?
順便說一句,這是代碼在非常嚴格的循環中執行。每秒約60次。
我有這樣的一段代碼,其中鯊魚告訴我這是一個性能瓶頸:是否有更快的方法來比較兩個變量?
CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB;
所有這些值CGFloat的。有沒有更快的方法來找出哪一個更小,並將其分配給最短的距離?也許甚至通過引用而不是複製一個值?我該怎麼做,以後如何訪問?
順便說一句,這是代碼在非常嚴格的循環中執行。每秒約60次。
你可能碰到的是拇指/手臂FPU問題。 iPhone應用默認編譯爲thumb,這是常規ARM表達式的16位子集。當在thumb模式下,浮點運算使用整型例程完成。您可以關閉此功能並提高浮點性能。參見「Break That Thumb For Best iPhone Performance」。
alt text http://gamesfromwithin.com/wp-content/uploads/2009/01/thumb.png
每秒60次是而不是一個嚴格的循環。就現代計算機而言,這非常輕鬆。
似乎沒有一種明顯的方法來改善表達;你確定Shark是否表明確切的陳述是一個問題,還是它指出了經常被調用的代碼中更常見的問題?
從內存來看,現代CPU有6到9個管道,更可能是自上次檢查以來。一旦優化器達到它,通常認爲CPU很重的實際上很少。
要麼或distanceB
(或兩者)平方根的結果?鯊魚蹤跡往往會將操作的結果歸咎於實際操作緩慢的操作。你是否真的需要取其兩者的平方根,還是可以在平方距離上進行選擇?
如果失敗,(1)在瞄準ARMv6時關閉拇指,(2)使用__builtin_fminf(distanceA, distanceB)
。然後繼續尋找應用程序中的真正瓶頸;每秒60次無需擔心。
爲什麼你自己寫這個而不是使用fmin()或fminf()? – NSResponder 2009-11-23 04:44:57