2012-04-18 27 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