2012-04-18 24 views
6

我有下面的代碼是需要一些時間來處理:如何測量Objective-C for iOS中兩行代碼之間的時間?

self.itemsArray = [Helper changeTheA:self.itemsArray]; 
self.itemsArray = [Helper convertDates:self.itemsArray]; 

有沒有一種方法,在儀器或其他地方,我可以測量時間需要從第一行代碼,以去第二行代碼....以蜱或毫秒爲單位?

我想做一些調整,但我需要能夠測量,以查看是否對前面的代碼進行了改進。

謝謝。

回答

6

最快,最骯髒的,可能不是很精確的方式

NSDate *startDate = [NSDate date]; 

self.itemsArray = [Helper changeTheA:self.itemsArray]; 

NSLog(@"changeTheA time taken: %f", -[startDate timeIntervalSinceNow]); 

一個稍微有點複雜,但可能更多的有用的解決方案,如果你正在做一些基本的分析可以看出here,它使用的是執行一個C函數阻止你提供。


大側面說明

賈斯汀指出,創建一個NSDate,然後記錄它會引入干擾到你的測量,所以這種技術是唯一真正的任何有利於讓球公園人物的實際行爲即使這樣你也許應該在時間塊內運行大量的代碼迭代。如果你需要準確的測量,那麼跳到賈斯汀的答案

+0

@Justin我通常只在目標代碼被循環很多次的情況下才使用它(例如,我將繼續增加迭代次數,直到我得到一些會顯示可測量差異的東西),而我只想要球場數字。 – 2012-04-18 23:59:18

+0

*編輯超出時間限制 - 將閱讀頂部職位*:這是相對緩慢和不準確。對於許多應用來說,這是太多的干擾。 – justin 2012-04-19 00:12:15

+0

很好澄清, – justin 2012-04-19 00:14:57

6

是的。你會使用儀器的採樣器。

運行程序,鍛鍊計劃了一段時間,然後找到在儀器其中包含符號:

self.itemsArray = [Helper changeTheA:self.itemsArray]; 
self.itemsArray = [Helper convertDates:self.itemsArray]; 

它應該顯示的行權行。另請注意,Instruments允許您指定採樣頻率,最低可達40微秒。

2

我會用下面的代碼:

NSTimeInterval start = CACurrentMediaTime(); 

// your code goes here 

NSTimeInterval end = CACurrentMediaTime(); 
NSTimeInterval delta = end - start; 
NSLog(@"Execution took %f seconds.", delta); 

這是一個很多比NSDate更精確。

+0

不需要在開始和結束之間的代碼? – s1m0n 2012-04-19 20:46:15

+1

史詩失敗。編輯。 – 2012-04-19 20:47:13