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的帮助页面指出的,测量性能并非如看起来那样不重要。尤其是当比较并发代码和非并发代码时,你需要注意特定硬件上运行的特定计算带宽和内存带宽。不同的机器会很不一样。如果代码的性能与访问临界区有关,那么我们上面提到的锁竞争问题就会有所影响。
相关文章推荐
- 源代码管理的基本操作
- Markers 提示 Maven Java EE Configuration Problem错误
- python爬虫
- QT教程1:QT如何写类
- PHP常用字符串函数
- java语言基础知识回顾
- union 共用体的使用
- 为什么函数式编程在Java中很危险?
- 为什么函数式编程在Java中很危险?
- 转载:C#中的泛型
- securecrt使用vbs脚本向多个tabs窗口发送带变量的命令
- QT画图教程7:QT实现透明度匹配及渐变等功能
- JAVA--浅谈集合
- 利用 spring bean 的属性 init-method 解决因为数据库连接没有初始化而导致首次点击页面超慢的问题
- java使double保留两位小数的方法
- c++类型转换关键字dynamic_cast和static_cast的使用区别
- 树莓派学习系列1----选择和启动
- 代码初试
- Dijkstra迪杰斯特拉算法及C++实现
- QTableWidget表格合并若干问题及解决方法