如何加快简单数组迭代的过程?

时间:2014-11-17 19:19:59

标签: ruby arrays multithreading performance

我的数组有75,000条记录,如下所示:

orders = [{ :order_id=>"7617",
            :date=>"2014-11-17 19:24:31",
            :firstname=>"Jack",
            :lastname=>"Bauer"},
          { :order_id=>"7618",
            :date=>"2014-11-17 19:34:51",
            :firstname=>"James",
            :lastname=>"Bond"},
            ... ]

我现在需要使用以下代码遍历此数组:

order_id_array = []
order_array    = []

orders.each do |order|
  prepared_order = prepare_order(order)
  order_id_array << prepared_order[0]
  order_array    << prepared_order[1]
end


def prepare_order(order)
  order_id = order[:order_id]

  [ order_id,
    { :order_id => order_id,
      :name => "#{order[:firstname]} #{order[:lastname]}",
      :date => Time.zone.parse(order[:date]),
      :customer_id => Moped::BSON::ObjectId.new } ]
end

此过程大约需要15秒。这太过分了。有时我的数组包含5M +哈希值。

如何加快此过程?

我试图像这样使用parallel gem

Parallel.each(orders, :in_threads => 3){ |order|
  ...
}

但是,这对我没有任何帮助。

1 个答案:

答案 0 :(得分:2)

分析您的代码以了解瓶颈是什么。

如果我不得不猜测,Time.zone.parse可能是&gt; = 80%的计算结果。给定固定的日期格式,您可以通过手动构建日期对象,从特定范围的子字符串中提取组件来显着提高性能。