我在一台普通酷睿双核电脑上执行 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); }
对比的意义不大。
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 方法,然后有一个额外的 == 操作,导致它略微慢一点。
empty?
a.size == 0
size
==