ruby - 每个内存效率与 Ruby 中的减少/注入(inject)

标签 ruby memory-management each reduce inject

我有一个大数组(超过 10 万个对象),我想将其组合成一个对象(为简单起见,我们假设这里是一个字符串)并通过一些处理运行数组中的每个元素(由函数 do_stuff).有两种自然的方法可以做到这一点:

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

big_array.reduce("") do |memo, e|
  memo + do_stuff(e)
end

reduce/inject 语法更美观,但问题是哪个更内存效率。我们已经知道 each is marginally more time efficient than reduce ,但是内存呢?

我也不清楚如何分析 Ruby 中的内存使用情况,尤其是在一段代码中,所以如果有人可以提供一些指示,我也会很感激。

最佳答案

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

使用 <<您正在修改原始字符串。这应该更好,因为将触发更少的 GC 周期。

您提到您正在使用字符串作为示例;因此很难回答您的实际问题。

关于ruby - 每个内存效率与 Ruby 中的减少/注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15949183/

相关文章:

c - 使用宏分配内存不好吗?

正确分配内存后 Java 代码出错

go - 内存使用情况: nil interface{} vs struct{}

javascript - jQuery 查找文本并使用每个函数写入另一个标签属性

javascript - 使用 jQuery 通过 .each() 获取数据属性值

ruby-on-rails - rails : switch connection on each request but keep a connection pool

ruby - kernel_require.rb :55:in `require' : cannot load such file error

ruby-on-rails - Rails 4 elasticsearch使用多个搜索条件,结合了搜索功能

jquery - jQuery 的 $().each() 方法在演示中的实际用途

ruby - 通过编写代码翻译器来赋能语言 : why is it a bad idea?