Ruby中的每个内存效率与reduce / inject相比

时间:2013-04-11 12:47:07

标签: ruby memory-management each reduce inject

我有一个大型数组(超过1000万个对象),我希望将它组合成一个对象(为简单起见,我们假设这里是一个字符串)并通过一些处理运行数组中的每个元素(由函数{{抽象) 1}})。有两种自然的方法可以做到这一点:

do_stuff

memo = ""
big_array.each do |e|
  memo << do_stuff(e)
end
memo

reduce / inject语法在美学上更具吸引力,但问题是哪个内存更有效。我们已经知道each is marginally more time efficient than reduce,但记忆呢?

我也不清楚如何在Ruby中描述内存使用情况,特别是在一块代码中,所以如果有人可以提供一些指示,我也会很感激。

1 个答案:

答案 0 :(得分:0)

我非常确定使用map reduce(如您的示例所示),每次+)都会创建一个新字符串。

使用<<修改原始字符串。这应该更好,因为将触发更少的GC循环。

您提到您使用字符串作为示例;所以很难回答你的真实问题。