2009-10-02 75 views
2

我想測量僅運行一次的iPhone上的代碼的性能,因此Instrument的CPU採樣器工具使用有限,因爲它需要很多迭代來收集足夠的樣本。對於只運行一次的代碼的iPhone性能測量?

是否有一種工具可以在每次調用時使用該函數的每個函數?那確實需要追蹤而不是統計抽樣?

問候, 約亨

+0

是否CPU取樣器工具需要多次重複實例?它意味着觸發代碼反覆進行基準測試?還是隻是傾聽,然後衡量執行?因爲除非你有500個iPhone,否則你可能只想卸載代碼來重新測試,對吧? – Anthony 2009-10-02 07:35:10

+0

非常感謝大家提供不同方式來衡量執行時間的建議 - 我沒有接受任何一種方法,因爲沒有提到任何工具(如問),因此人們應該爲他們選擇最適合的解決方案。 – Jochen 2012-12-06 12:22:38

回答

0

這是可以做到槽插設,here是一篇文章介紹如何它跟蹤消息來完成,你也許可以在定時其執行適應它。

8

問題"Are there non-sampling time-profiling tools for iPhone apps?"與您所要求的相似。在我的迴應中,我指出了DTrace,它可以執行基於函數調用的分析,但不幸的是只能在模擬器中工作,而不能在實際設備上工作。您也可以使用Shark在足夠小的採樣間隔內收集數據。

最後,如下面的代碼可以用來在應用程序中執行代碼的執行時間:

CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent(); 

// Your code here 

elapsedTime = CFAbsoluteTimeGetCurrent() - startTime; 
NSLog(@"Elapsed time in seconds: %f", elapsedTime); 
+0

感謝您的回答。我現在這樣做,但它會很高興有一個工具... – Jochen 2010-01-19 15:18:13

2

如果您有執行不可接受的一次它被稱爲,賠率代碼一些大的塊它很好,它有一些耗時的循環,或者你有一些低效的低級函數的調用。循環控制結構應該容易通過檢查來獲取,而通過手動計時CGAbsoluteTimeGetCurrent()和「二進制調試搜索」(是塊的前半部分的瓶頸或者第二季度?第一季度或第二季度?等)

如果你不能找到與該類型的搜索熱點,這是一個很好的跡象表明,你做得好,性能明智,更大性能將需要重新考慮你的方法。

我不是故意的,但你確定你在乎嗎?如果代碼只執行一次,它的相對性能可能是一個好奇心問題,而不僅僅是最終用戶的價值。

+0

我跟蹤啓動代碼,本質上運行應用程序啓動時只運行一次。但是,對於用戶來說,啓動需要2秒而不是10秒就很重要。 – Jochen 2010-01-19 15:19:29