我正在使用Xcode 7. iPhone 5s模拟器(iOS 9.0)。
我正在尝试使用XCTestCase -measureBlock:
来衡量在某些功能上花费的时间。这会将块内的代码运行10次,并报告每次运行所需的时间,平均值,STDEV等。
事实证明,首次运行的时间总是非常高,比如高出400-500%。对于一个非常简单的方法也是如此,甚至在度量块中也没有。我的- (void)setUp
或- (void)tearDown
中没有任何内容。
NSString -stringWithFormat:
的结果。在图表的第一个条形图中查看尖峰。
values: [0.000031, 0.000005, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003]
空白区块的结果。类似的结果。
values: [0.000007, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001]
这是一个错误还是什么?发生了什么事?
答案 0 :(得分:3)
这可能是某些缓存升温的神器。
例如,Objective-C运行时为每个类维护一个选择器缓存。这意味着对每个方法的第一次调用比以下调用稍慢。
您可以在调用measureBlock:
之前放置测量块的内容,以测试是否为真。因此,热身运行就不会被测量了。
答案 1 :(得分:2)
测量的块执行十次,测试输出显示平均执行时间以及单个运行时间和标准偏差(http://nshipster.com/xctestcase/) 因此,如果您的代码执行此操作,第一次可以填充缓存并准备数据,在接下来的步骤中,它可以使用缓存数据,并且执行时间也可以更短。