Ruby array.empty?耗时多久

crann66 · 2022年05月19日 · 最后由 ccmywish 回复于 2022年05月21日 · 374 次阅读

我在一台普通酷睿双核电脑上执行 10000000 次的 array.empty?与 array.size == 0 的耗时比较,差别能有 0.4 秒

差别能有 0.4 秒

所以到底谁快谁慢?

贴个 benchmark 代码呗,也许其他人试着跑跑结果会不一样

static VALUE
rb_ary_empty_p(VALUE ary)
{
    return RBOOL(RARRAY_LEN(ary) == 0);
}

对比的意义不大。

spike76 回复

代码

require 'benchmark'

n = 1_000_000_000
a = []

Benchmark.bm do |b|

  b.report {
    n.times do 
      a.empty?
    end
  }

  b.report { 
    n.times do 
      a.size == 0
    end
  }

end

结果

     user     system      total        real
40.484000   0.000000  40.484000 ( 40.483034)
45.938000   0.000000  45.938000 ( 45.939939)

结论

empty? 快一丢丢,可能是因为 @pynix 给出的empty?代码直接用的 C 语言一步就出来了。而 a.size == 0 要执行两个步骤,先调用 size 方法,然后有一个额外的 == 操作,导致它略微慢一点。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号