2010-07-07 67 views

回答

2

我试图运行下面的几次(以下约克的评论这已被更新为使用一个固定的变量的值,而不是创建大量字符串)

require 'benchmark' 

Example = Struct.new("Example", :value) 

struct = Example.new 
hash = {} 
value = "The value" 

n = 5000000 
Benchmark.bm do |m| 
    # test assignment and access for Hash and Struct 
    m.report { n.times do; hash[:value] = value; end } 
    m.report { n.times do; struct.value = value; end } 
end 

更新

它似乎有足够大的值nStruct稍微慢一点,但我无法想象这在实践中会引人注意或是一个问题。

+0

如果你的基准是由创建(和垃圾收集!)200万字符串的开销所支配的,我不会感到惊讶。 – 2010-07-07 13:34:17

+1

好点。如果我们使用单个字符串作为值而不是每次创建新字符串,您认为这会是更好的方法吗? (我将编辑答案) – mikej 2010-07-07 14:14:11

+2

不,我认为如果OP自己简单地完成了这项工作,他*真实*环境中的* actual *代码在*真实*负载下的实际* Ruby实现上进行基准测试会更好。因为其他一切都只是假的。 – 2010-07-07 19:33:50