9

我想知道以至少 1ms 的精度向对象发送消息需要多长时间。我该怎么做呢?

4

3 回答 3

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;

参考: 技术问答 QA1398:马赫绝对时间单位

于 2009-03-15T02:16:44.260 回答
11

这就是我所做的:

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

输出将以秒为单位(带小数部分)。 NSDates 具有毫秒级的分辨率,尽管我不确定它们的精确度。

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

于 2009-03-14T22:14:53.110 回答
0

使用dispatch_benchmark以纳秒为单位记录方法执行时间。
它的语法比手动循环好得多,并且调用mach_absolute_time() dispatch_benchmark 是 Grand Central Dispatch 的一部分。此函数未公开声明,因此您必须在使用前自行声明:

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

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

size_t const  blockIterations = 1; //block call count
uint64_t t = dispatch_benchmark(blockIterations, ^{ //your code inside block
        [self TEST_processJSONDataRecordsWithCompletionHandler:^(id handler) {}];
    });
NSLog(@" Avg. Runtime in nanoseconds : %llu ns", t);

归功于基准测试

于 2016-11-02T07:28:46.040 回答