我正在批处理期间快速填充并清空一个相当大的数组作为缓冲区,我想在这些操作期间防止内存泄漏并最大化速度。
目前,我填充数组,然后将其清空:
a = []
我刚刚拿起Ruby来调整第三方工具,所以我不知道它的垃圾收集是如何工作的。这是清除数组的最佳方法,还是我应该调用
a.clear
答案 0 :(得分:1)
根据我在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)