我在Objective-C應用程序中有一個關鍵方法,我需要儘可能進行優化。我首先需要對這一個單一方法進行一些簡單的基準測試,以便我可以比較我的優化進度。基準Objective-C中的特定方法
什麼是最簡單的方式跟蹤給定的方法的執行時間,比如說毫秒,然後打印到控制檯。
我在Objective-C應用程序中有一個關鍵方法,我需要儘可能進行優化。我首先需要對這一個單一方法進行一些簡單的基準測試,以便我可以比較我的優化進度。基準Objective-C中的特定方法
什麼是最簡單的方式跟蹤給定的方法的執行時間,比如說毫秒,然後打印到控制檯。
mach/mach_time.h中的CFAbsoluteTimeGetCurrent()(大約6微秒)或mach_absolute_time()(稍快些,但需要調用mach_timebase_info()並進行一些轉換)。然後你可以打印到標準輸出或使用NSLog;請注意,NSLog需要的年齡(50毫秒?),所以你想要後進行測量。 stdout比我想的快一點,但不會進入syslog(即Xcode Organizer/iPhone配置實用程序控制臺)。
有相當多的方式來測試您的代碼,但通過儀器和/或鯊魚運行它應該給你足夠的信息,看看你的代碼是緩慢的。但請記住,不成熟的優化是萬惡之源。
其他人沒有提到的一件事......當你使用Instruments或Shark進行性能檢查時,請在設備上而不是模擬器上運行你的應用程序。該設備對許多事情來說比模擬器慢得多,但有時對於某些硬件加速的東西實際上速度更快,但模擬器並非如此,因此檢查設備是獲得準確圖像的唯一方法。
此外,請注意,NSLogs可以減慢它地段。
+1 NSLog只能用於包含相同數量的NSLog語句的代碼段之間的相對測量。 – TechZen 2010-06-10 20:06:38
如果我編譯一個帶有NSLog的應用程序,即使我沒有進行主動調試,NSLogs仍然會執行嗎? – 2010-06-10 20:31:42
@Jasconius - 是的,他們仍然會輸出到終端。 – DenverCoder9 2010-06-10 20:40:40
我發現了一個地方,它會給我累積的CPU時間,但這種方法的執行時間每次調用都會有很大的不同,所以我需要對每個調用進行細分,找不到那個。一點幫助? – 2010-06-10 20:37:22