什么" nil#"在剖析器结果中意味着什么

时间:2014-06-12 02:10:39

标签: ruby profiling

以下是代码的简化部分:

srand 0

WIDTH, HEIGHT = 10, 10
array = Array.new(HEIGHT){ [0]*WIDTH }

require "profile"
10000.times do
    y, x = rand(HEIGHT), rand(WIDTH)
    g = array[y][x] + [-1,+1].sample
    array[y][x] = g unless [[y-1,x],[y+1,x],[y,x-1],[y,x+1]].any?{ |y, x|
        y>=0 && y<HEIGHT && x>=0 && x<WIDTH && 1 < (array[y][x] - g).abs
    }
end

我们看到(ruby 2.0.0p451 (2014-02-24) [i386-mingw32]):

  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 39.33     0.86      0.86    47471     0.02     0.05  nil#

如果我们完全删除unless事物:

 53.48     0.48      0.48    10000     0.05     0.09  nil#

看起来我们得到了这个nil#操作:

  1. 每次比较布尔操作
  2. 每个数组对象创建数据块设置
  3. 很高兴得到一个深刻的答案。

0 个答案:

没有答案