Sure: there you go, in a somewhat :) clinical testcase.

----------------- snip -----------------
require "benchmark"

CNT=200000

Benchmark.bm { |x|
  x.report "V1" do
    (1..CNT).each do [1].each { |i| i.to_i } end
  end
}

class Symbol
  def to_proc; Proc.new { |*args| args.shift.__send__(self, *args) }; end
end

Benchmark.bm { |x|
  x.report "V2" do
    (1..CNT).each do [].each (&:to_i) end
  end
}

class Symbol
  def to_proc; Proc.new { |obj| obj.__send__(self) }; end
end

Benchmark.bm { |x|
  x.report "V3" do
    (1..CNT).each do [1].each (&:to_i) end
  end
}

class Symbol
  def to_proc; @proc ||= Proc.new { |*args| args.shift.__send__(self,
*args) }; end
end

Benchmark.bm { |x|
  x.report "V4" do
    (1..CNT).each do [1].each (&:to_i) end
  end
}
----------------- snap ----------------

The result is on my machine as follows:

      user     system      total        real
V1  0.200000   0.000000   0.200000 (  0.201815)
      user     system      total        real
V2  0.860000   0.000000   0.860000 (  0.870993)
      user     system      total        real
V3  0.950000   0.000000   0.950000 (  0.953523)
      user     system      total        real
V4  0.680000   0.010000   0.690000 (  0.685361)

The fastest, V1, doesn't build proc objects at all. V2 is rails'
default implementation, V4 caches the Proc objects inside the symbol,
i.e. generates the Proc object only.

Of course, invoking 200000 Proc objects this way is usually not what
you are doing in any application; we, however, had a test case where
we did it 9000 times per action and it matched badly with the garbage
collector. Ruby enterprise behaved much much better :)

/eno

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to