如何准确计算在iPhone上调用功能所需的时间?

时间:2009-03-14 21:59:16

标签: iphone benchmarking

我想知道将消息发送到具有至少1ms准确度的对象需要多长时间。我该怎么做?

3 个答案:

答案 0 :(得分:15)

您可以使用mach_absolute_time以纳秒为单位进行衡量。

#import <mach/mach_time.h>

uint64_t startTime = 0;
uint64_t endTime = 0;
uint64_t elapsedTime = 0;
uint64_t elapsedTimeNano = 0;

mach_timebase_info_data_t timeBaseInfo;
mach_timebase_info(&timeBaseInfo);

startTime = mach_absolute_time();

//do something here

endTime = mach_absolute_time();

elapsedTime = endTime - startTime;
elapsedTimeNano = elapsedTime * timeBaseInfo.numer / timeBaseInfo.denom;

参考: Technical Q&A QA1398: Mach Absolute Time Units

答案 1 :(得分:11)

这就是我的所作所为:

NSDate * start = [NSDate date];
// do whatever I need to time
NSLog(@"time took: %f", -[start timeIntervalSinceNow]);

输出将以秒为单位(带小数部分)。 NSDate具有毫秒级的分辨率,但我不确定它们的确切准确度。

如果您尝试计时的代码太快,请将其放入运行代码一百次的循环中。 (当然,这假设您正在计时的代码没有副作用。)

答案 2 :(得分:0)

使用 dispatch_benchmark 以纳秒记录方法执行时间 它具有比手动循环更好的语法,并且调用 mach_absolute_time() dispatch_benchmark是Grand Central Dispatch的一部分。此功能未公开声明,因此您必须在使用前自行完成此操作:

UIPickerView

我将此用于日志执行时间:

extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));

信用转到Benchmarking