我的数组有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|
...
}
但是,这对我没有任何帮助。
答案 0 :(得分:2)
分析您的代码以了解瓶颈是什么。
如果我不得不猜测,Time.zone.parse
可能是&gt; = 80%的计算结果。给定固定的日期格式,您可以通过手动构建日期对象,从特定范围的子字符串中提取组件来显着提高性能。