首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS中的微基准测试--方法执行所需的时间

iOS中的微基准测试--方法执行所需的时间
EN

Stack Overflow用户
提问于 2016-09-03 02:16:06
回答 1查看 582关注 0票数 1

我试着看看在Xcode 7中执行iOS版本7-8-9的应用程序需要多长时间。

看到这个问题了,计算时间(目标-c)。答案是不要依赖NSDate来获得如此短的时间。相反,这个答案建议:

代码语言:javascript
复制
CFTimeInterval startTime = CACurrentMediaTime();
// perform some action
CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;

即使在导入#import <QuartzCore/QuartzCore.h>之后,这段代码也不会编译。报告链接器故障:

架构armv7的未定义符号: "_CACurrentMediaTime",引用自:

有没有其他方法可以以毫秒或纳秒为单位来跟踪一个短暂的时刻?

请不要警告固有的变化无常,使微基准不可靠。我只是想大致了解一下时间安排。

可能是Objective或Swift有一些类似于JMH,Java微基准测试Harness的东西,用于构建、运行和分析用Java虚拟机和其他语言编写的nano/微/milli/宏基准测试。

EN

回答 1

Stack Overflow用户

发布于 2016-09-03 21:23:05

NSDate

其他人则警告说,当NSDate用于微基准测试时,它可能会稍微有些抖动。但对于随意使用来说,效果很好。

代码语言:javascript
复制
NSDate *start = [NSDate date];
// …
NSTimeInterval timeInterval = [start timeIntervalSinceNow];
NSLog(@"elapsedTime after Check call: %f" , timeInterval );

也许有更好的方法,但这确实有效。例如,我在第5代iPod上计时了一个方法调用,它在几次运行中始终花费了0.21到0.25秒。切换到一个iPad空气,同样的方法一贯在0.11至0.13秒,在几次运行。当然,这是一个10-20%的差异,大约在这两个设备。但偶然的观察,这可能足以满足你的需要。只需确保您的测试多次运行。

用Receigen代码运行的示例

运行示例,执行一些利用雷根 Mac应用程序为App收据验证生成的源代码的代码。NSDate似乎能很好地跟踪微秒。

我不包括源代码,但您可以通过这种事件序列的描述来获得主要的想法。

  • 定义并填充了一个代码块。没有执行业务逻辑,只创建目标C区 (一个闭锁 )。
  • 我的SKRequestDelegate实现是实例化的。没有真正的代码,只是通过NSLog进行一些日志记录。
  • 执行生成的Receigen代码。这是一堆混淆的C代码,它通过调用OpenSSL来解析苹果的应用程序收据来完成一些解密工作。
  • 解密和解析之后,Receigen通过调用我们在顶层定义的块来报告其结果。对于我们的三个应用程序中的购买产品,这个块被调用一次。
  • 在Receigen生成的代码返回之后,最后一次捕获经过的时间.

您可以在下面看到块定义仅为22微秒。我们的SKRequestDelegate的实例化要多得多,大约1,500微秒。Receigen解密和解析花费了绝大部分时间,大约0.1秒。然后大约100微秒来报告它的发现,每次调用块三次。

2016-09-03 17:13:57.883 XXApp231:7509在声明和填充块后:-0.000022 2016-09-03 17:13:57.884 XXApp231:7509 elapsedTime实例化SKRequestDelegate:-0.001579 2016-09-03 17:13:57.995 XXApp231:7509 elapsedTime 2016-09-03 17:13:57.995 XXApp231:7509 elapsedTime 2016-09-03 17:13:57.995 XXApp231:7509 elapsedTime 2016-09-03 17:13:57.997 XXApp231:7509 elapsedTime

在运行了这几次并得到一致的结果之后,我得出结论,NSDate确实对毫秒-微秒范围内的临时基准测试很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39302647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档