代码运行效率统计方法 dispatch_benchmark

17 篇文章 0 订阅
14 篇文章 0 订阅

转载:http://nshipster.cn/benchmarking/ 



对于完成有意义的工作来说抽象很重要,但却会带来副作用。为了工作起来更顺手我们需要洞察一些细枝末节来确定一些批量处理的具体逻辑。找到一个特定上下文的有用信息是非常重要的,是具有挑战性的,是高效编程的核心。

利用benchmarking,工程师可以揭开他们代码中运行效率的面纱,然后利用获得的信息来优化。这对于每一位想让app运行更快的工程师(或者说每一个自重的工程师)来说都是必备工具。


“benchmark”这个词可以追溯到19世纪。它的本意是,一个 benchmark 就是一个一种把石头切割成平板的切刀或用来测量的支架。后来这个词的“测量东西的标准”的比喻义被应用到各种领域了。

在编程中, benchmark 和 benchmarking 略微有语义上的区别:

benchmark 是程序明确地要测量并比较硬件以及软件上的运行效率。相对来说 benchmarking 表示的则是测量效率的一段代码。

Objective-C 中使用 Benchmarking 测量效率

Benchmark应该和其他认知论有一样的规律可遵循,像统计量那样的科学方法一样有通用的理解。

科学方法涵盖了一系列的逻辑步骤来推演问题:

  1. 提出问题
  2. 构造假说
  3. 预期结果
  4. 验证假说
  5. 分析结果

当应用到编程时,一般来说会提出两类问题:

  • 这段代码的 绝对 效率是多少?达到了计算力和内存的上限了吗?应用不同样本大小时的瓶颈操作是什么?
  • 这段代码的 相对 效率是多少?方法 A 和 方法 B 哪个更快?

因为从操作系统本身的一切基本因素都是可变性非常强的,性能应该通过大量的试验来测量。对于大多数应用来说,样本数量在 105 到 108 直接是合理的。

第一发:CFAbsoluteTimeGetCurrent

这里例子中,我们看一看向可变数组中添加元素的效率。

为了建立 benchmark,我们指定一个 count 表示有多少个元素需要添加,iterations 表示这个测试要运行多少次。

Objective-C
static size_t const count = 1000;
static size_t const iterations = 10000;

因为我们不需要测试申请内存的时间,所以我们在 benchmark 外部只声明一次要添加进数组的元素。

Objective-C
id object = @"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值