如何测量 iOS 的 Objective-C 中两行代码之间的时间?
Posted
技术标签:
【中文标题】如何测量 iOS 的 Objective-C 中两行代码之间的时间?【英文标题】:How can I measure the time it takes between two lines of code in Objective-C for iOS? 【发布时间】:2012-04-18 23:27:18 【问题描述】:我有以下代码需要一段时间来处理:
self.itemsArray = [Helper changeTheA:self.itemsArray];
self.itemsArray = [Helper convertDates:self.itemsArray];
有没有一种方法,在 Instruments 或其他地方,我可以测量从第一行代码到第二行代码所花费的时间......以滴答声或毫秒或其他方式?
我想进行一些调整,但我需要能够进行测量,以查看我是否对之前的代码进行了改进。
【问题讨论】:
【参考方案1】:最快,最脏,可能不是很精确的方式
NSDate *startDate = [NSDate date];
self.itemsArray = [Helper changeTheA:self.itemsArray];
NSLog(@"changeTheA time taken: %f", -[startDate timeIntervalSinceNow]);
一个稍微复杂但可能更有用的解决方案,如果你正在做一些基本的分析可以看到here,它使用一个 C 函数来执行你提供的一个块。
重要说明
正如贾斯汀指出的那样,创建NSDate
然后将其注销的实际行为会对您的测量产生干扰,因此这种技术仅对获取球场数据有任何好处,即便如此,您也应该运行大量数据计时块内的代码迭代次数。如果您需要准确的测量值,请跳至贾斯汀的回答
【讨论】:
@Justin 我通常只在目标代码循环很多次的情况下使用它(例如,我会不断增加迭代,直到我得到一些可以显示出可测量差异的东西),我只想要棒球场人物。 编辑超出时间限制 - 会读起来像置顶帖:这是相对缓慢且不准确的。对于许多应用程序来说,这干扰太大了。 这可以满足我的需要。我只需要告诉几秒钟,没有什么比这更深的了,所以这对我有用。谢谢。 @Paul.s 很酷。尽管您确实提到它最初是不准确的,但澄清是有帮助的。干杯。【参考方案2】:是的。为此,您可以使用 Instruments 的 Sampler。
运行应用程序,运行程序一段时间,然后在 Instruments 中找到符号,其中包含:
self.itemsArray = [Helper changeTheA:self.itemsArray];
self.itemsArray = [Helper convertDates:self.itemsArray];
它应该逐行显示权重。另请注意,Instruments 允许您指定采样频率,低至 40 微秒。
【讨论】:
【参考方案3】:我会使用以下代码:
NSTimeInterval start = CACurrentMediaTime();
// your code goes here
NSTimeInterval end = CACurrentMediaTime();
NSTimeInterval delta = end - start;
NSLog(@"Execution took %f seconds.", delta);
比NSDate
精确很多。
【讨论】:
以上是关于如何测量 iOS 的 Objective-C 中两行代码之间的时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何从Javascript调用Objective-C方法并将数据发送回iOS中的Javascript?
如何在 iOS 13 Objective-c 中处理鼠标事件