如何测量 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 中处理鼠标事件

Objective-C/iOS:如何从 CoreData 中的属性中删除“值”?

Objective-C:如何正确处理 iOS 推送通知?

如何通过NEHotspotHelper获取WiFi列表(IOS,objective-c)