您的位置:首页 > 编程语言

GCD 之 dispatch_benchmark 测量指定代码块执行时间

2016-04-22 22:28 337 查看


基准测试

在 GCD 的一个不起眼的角落,你会发现一个适合优化代码的灵巧小工具:
uint64_t dispatch_benchmark(size_t count, void (^block)(void));


把这个声明放到你的代码中,你就能够测量给定的代码执行的平均的纳秒数。例子如下:
size_t const objectCount = 1000;
uint64_t n = dispatch_benchmark(10000, ^{
@autoreleasepool {
id obj = @42;
NSMutableArray *array = [NSMutableArray array];
for (size_t i = 0; i < objectCount; ++i) {
[array addObject:obj];
}
}
});
NSLog(@"-[NSMutableArray addObject:] : %llu ns", n);


在我的机器上输出了:
-[NSMutableArray addObject:] : 31803 ns


也就是说添加1000个对象到 NSMutableArray 总共消耗了31803纳秒,或者说平均一个对象消耗32纳秒。

正如
dispatch_benchmark
帮助页面指出的,测量性能并非如看起来那样不重要。尤其是当比较并发代码和非并发代码时,你需要注意特定硬件上运行的特定计算带宽和内存带宽。不同的机器会很不一样。如果代码的性能与访问临界区有关,那么我们上面提到的锁竞争问题就会有所影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: