2
A
回答
12
试戴:
#!/usr/local/bin/ruby -w
require 'benchmark'
iterations = 1000000
Benchmark.bmbm do |bench|
numbers = (1..100).to_a
bench.report('inject') do
x = numbers.inject { |sum, num| sum + num }
end
bench.report('eval') do
x = eval(numbers.join('+'))
end
end
其中给出:
telemachus ~ $ ruby bench.rb
Rehearsal ------------------------------------------
inject 0.000000 0.000000 0.000000 ( 0.000029)
eval 0.000000 0.000000 0.000000 ( 0.000261)
--------------------------------- total: 0.000000sec
user system total real
inject 0.000000 0.000000 0.000000 ( 0.000047)
eval 0.000000 0.000000 0.000000 ( 0.000186)
但实际上,我认为你是微优化。我会使用inject
,除非它非常低效,因为这是该方法的目的。
另外我认为你的代码inject
有两个问题。首先,你的意思不是int
,你的意思是sum
。其次,您可以简单地添加项目,而不是使用+=
。第一个参数inject
自动累计值。
+0
eval会因为它的表面远慢,避免它,当你可以。 – khelll 2009-10-11 19:48:16
1
作为一个大拇指的规则,eval代码总是比其合理的eval-free替代方法(在这种情况下)慢。如果它处理用户输入,它也可能不安全。
和公正的纪录,铁轨(或require 'activeresource'
后),你也可以使用numbers.sum
方法,它是大致一样快,注入恕我直言更具可读性。
相关问题
- 1. 在Java中什么更昂贵?序列化或写入文件?
- 2. 什么更昂贵?作业或声明?
- 3. 处理碰撞 - 阵列查找昂贵
- 4. 为什么Wpf的DrawingContext.DrawText如此昂贵?
- 5. 为什么File.Open如此昂贵?
- 6. 为什么alpha混合如此昂贵?
- 7. 为什么试块价格昂贵?
- 8. sklearn中的矢量化似乎非常昂贵。为什么?
- 9. 为什么分配或初始化NSDateFormatter被视为“昂贵”?
- 10. 昂贵的StaticResource
- 11. 使用昂贵的INNER JOIN优化MySQL查询
- 12. 优化呼叫昂贵功能的次数
- 13. 为什么移动比通过const&?更加昂贵?
- 14. Optimzing multiprocessing.Pool昂贵的初始化
- 15. 是否实例化XmlDocument昂贵?
- 16. Thread.getStackTrace()有多昂贵?
- 17. CreateThread()有多昂贵?
- 18. SurfaceHolder.lockCanvas()过于昂贵
- 19. 是“ConnectionMultiplexer.IsConnected”昂贵吗?
- 20. 如何昂贵或昂贵是用C++继承
- 21. 为什么Elasticsearch服务提供商那么昂贵?
- 22. Java锁定有多昂贵?
- 23. MySQL事件有多昂贵?
- 24. 便宜SSL VS昂贵SSL
- 25. 最近昂贵的查询
- 26. 创建com.rits.cloning.Cloner是否昂贵?
- 27. SQL ORDER BY有多昂贵?
- 28. UITableView的reloadData有多昂贵?
- 29. 此属性调用昂贵
- 30. 线程有多昂贵?
这是非常有创意的使用第二种方法:) – pierrotlefou 2009-10-12 02:11:32
+1的第二选择,但你也可以做my_array.sum – Jeet 2012-11-24 06:32:56