2009-11-23 91 views
3

我有這樣的一段代碼,其中鯊魚告訴我這是一個性能瓶頸:是否有更快的方法來比較兩個變量?

CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB; 

所有這些值CGFloat的。有沒有更快的方法來找出哪一個更小,並將其分配給最短的距離?也許甚至通過引用而不是複製一個值?我該怎麼做,以後如何訪問?

順便說一句,這是代碼在非常嚴格的循環中執行。每秒約60次。

+0

爲什麼你自己寫這個而不是使用fmin()或fminf()? – NSResponder 2009-11-23 04:44:57

回答

10

每秒60次是而不是一個嚴格的循環。就現代計算機而言,這非常輕鬆。

似乎沒有一種明顯的方法來改善表達;你確定Shark是否表明確切的陳述是一個問題,還是它指出了經常被調用的代碼中更常見的問題?

0

從內存來看,現代CPU有6到9個管道,更可能是自上次檢查以來。一旦優化器達到它,通常認爲CPU很重的實際上很少。

3

要麼​​或distanceB(或兩者)平方根的結果?鯊魚蹤跡往往會將操作的結果歸咎於實際操作緩慢的操作。你是否真的需要取其兩者的平方根,還是可以在平方距離上進行選擇?

如果失敗,(1)在瞄準ARMv6時關閉拇指,(2)使用__builtin_fminf(distanceA, distanceB)。然後繼續尋找應用程序中的真正瓶頸;每秒60次無需擔心。