我试着看看在Xcode 7中执行iOS版本7-8-9的应用程序需要多长时间。
看到这个问题了,计算时间(目标-c)。答案是不要依赖NSDate来获得如此短的时间。相反,这个答案建议:
CFTimeInterval startTime = CACurrentMediaTime();
// perform some action
CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;即使在导入#import <QuartzCore/QuartzCore.h>之后,这段代码也不会编译。报告链接器故障:
架构armv7的未定义符号: "_CACurrentMediaTime",引用自:
有没有其他方法可以以毫秒或纳秒为单位来跟踪一个短暂的时刻?
请不要警告固有的变化无常,使微基准不可靠。我只是想大致了解一下时间安排。
可能是Objective或Swift有一些类似于JMH,Java微基准测试Harness的东西,用于构建、运行和分析用Java虚拟机和其他语言编写的nano/微/milli/宏基准测试。
发布于 2016-09-03 21:23:05
NSDate
其他人则警告说,当NSDate用于微基准测试时,它可能会稍微有些抖动。但对于随意使用来说,效果很好。
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似乎能很好地跟踪微秒。
我不包括源代码,但您可以通过这种事件序列的描述来获得主要的想法。
SKRequestDelegate实现是实例化的。没有真正的代码,只是通过NSLog进行一些日志记录。您可以在下面看到块定义仅为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确实对毫秒-微秒范围内的临时基准测试很有用。
https://stackoverflow.com/questions/39302647
复制相似问题