Skip to content

Instantly share code, notes, and snippets.

@Bodacious
Created October 2, 2011 19:07
Show Gist options
  • Save Bodacious/1257790 to your computer and use it in GitHub Desktop.
Save Bodacious/1257790 to your computer and use it in GitHub Desktop.
Benchmark comparing class_eval to define_method when defining methods
require "benchmark"
COUNT = 1000
Benchmark.bmbm do |test|
test.report "class eval" do
class ClassEvalClass;end
COUNT.times do |i|
ClassEvalClass.send :class_eval, "def method_no_#{i}; return #{i} ;end"
d = ClassEvalClass.new
d.send("method_no_#{i}")
end
end
test.report "define_m" do
class DefineMClass;end
COUNT.times do |i|
DefineMClass.send :define_method, "method_no_#{i}" do
return i
end
d = DefineMClass.new
d.send("method_no_#{i}")
end
end
end
@Bodacious
Copy link
Author

# Rehearsal ----------------------------------------------
# class eval   0.020000   0.000000   0.020000 (  0.017990)
# define_m     0.000000   0.000000   0.000000 (  0.006061)
# ------------------------------------- total: 0.020000sec

#                 user     system      total        real
# class eval   0.020000   0.000000   0.020000 (  0.018008)
# define_m     0.010000   0.000000   0.010000 (  0.004436)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment