On Sep 30, 4:58 am, Elliot Temple <[EMAIL PROTECTED]>
wrote:
> Notice it gets much worse with rails loaded. Anyone got a fix, or know
> why this is happening?
I don't think it is Rails' fault (at least not directly).
I ran the test you ran and got:
user system total real
0.710000 0.010000 0.720000 ( 0.715909)
0.010000 0.000000 0.010000 ( 0.013030)
Then I ran 'Aaaa'.upto('Azzz') { |x| Object.const_set(x, '1'), ie I
generated 20000 or so extra constants and reran the benchmarks and got
22.300000 0.250000 22.550000 ( 23.584470)
0.000000 0.000000 0.000000 ( 0.005260)
Adding the same number of constants again doubles those numbers - it
would appear that there is something in ruby that makes Module#name
linear in the number of constants set in the case where the name is
unset
So I don't think Rails is doing anything that makes this worse, other
than defining a whole bunch of constants
Fred
>
> cg5[20:55] development > ruby -v
> ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
> cg5[20:51] development > irb
> irb(main):001:0> require 'benchmark'
> => true
> irb(main):002:0> n = 5000
> => 5000
> irb(main):003:0> m1 = Module.new
> => #<Module:0x5d6c54>
> irb(main):004:0> module M2; end
> => nil
> irb(main):005:0> Benchmark.bm do |x|
> irb(main):006:1* x.report { n.times do m1.name end }
> irb(main):007:1> x.report { n.times do M2.name end }
> irb(main):008:1> end
> user system total real
> 1.710000 0.050000 1.760000 ( 2.807539)
> 0.010000 0.000000 0.010000 ( 0.005157)
> => true
> irb(main):009:0> ^Dcg5[20:51] development > script/console
> Loading development environment (Rails 2.0.2)>> require 'benchmark'
> => []
> >> n = 5000
> => 5000
> >> m1 = Module.new
>
> => #<Module:0x205c308>>> module M2; end
> => nil
> >> Benchmark.bm do |x|
>
> ?> x.report { n.times do m1.name end }>> x.report { n.times do M2.name
> end }
> >> end
>
> user system total real
> 14.120000 0.630000 14.750000 ( 28.017196)
> 0.000000 0.000000 0.000000 ( 0.010137)
> => true
>
> --
> Posted viahttp://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---