在Ruby中清除数组的最精益/最高效的方法是什么?

时间:2014-07-29 19:09:08

标签: ruby garbage-collection

我正在批处理期间快速填充并清空一个相当大的数组作为缓冲区,我想在这些操作期间防止内存泄漏并最大化速度。

目前,我填充数组,然后将其清空:

a = []

我刚刚拿起Ruby来调整第三方工具,所以我不知道它的垃圾收集是如何工作的。这是清除数组的最佳方法,还是我应该调用

a.clear

1 个答案:

答案 0 :(得分:1)

数组#clear明显更快

根据我在MRI Ruby 2.1.2下的基准测试,使用Array#clear似乎要快得多。请参阅下面的基准代码和结果。

基准代码

require 'benchmark'

i = 10_000
Benchmark.bmbm do |x| 
  x.report(:literal) { i.times do a = Array.new(i); a = []  end }
  x.report(:clear)   { i.times do a = Array.new(i); a.clear end }
end

基准测试结果

Rehearsal -------------------------------------------
literal   0.130000   0.110000   0.240000 (  0.238041)
clear     0.030000   0.010000   0.040000 (  0.026735)
---------------------------------- total: 0.280000sec

              user     system      total        real
literal   0.110000   0.100000   0.210000 (  0.217941)
clear     0.030000   0.000000   0.030000 (  0.025402)