Array#flatten的Ruby 1.9性能问题

时间:2011-01-07 18:21:55

标签: ruby

我对Array#flatten方法的性能有两个问题。

下面是一个简单的测试,将flatten方法与自制的naive实现与Enumerable#inject进行比较。

a)我的注入代码如何比原生的flatten实现明显更好 - 我使用的是flatten(1)版本

b)测试中每10行左右观察到的时间峰值是多少?这可能是垃圾收集效果吗?

array = (1..3).collect {(1..100).to_a}
30.times {100.times {array.flatten(1)}}
30.times {100.times {array.inject([]) {|a, e| a += e}}}

带有格式化的跟踪代码

30.times {now = Time.now; 100.times {array.flatten(1)};                 p "#{(1000 * (Time.now - now)).to_i.to_s.rjust(4)}ms"}
30.times {now = Time.now; 100.times {array.inject([]) {|a, e| a += e}}; p "#{(1000 * (Time.now - now)).to_i.to_s.rjust(4)}ms"}

我在普通的irb和Rails脚本/控制台环境中尝试了这个,结果相同。注入版本明显优于Array#flatten方法。

0 个答案:

没有答案