解决方法
这是一种有效的技术,不知道它是否是最好的.
require 'sinatra' require 'profiler' get '/' do Profiler__.start_profile do_it_fast do_it_slow do_it_fast Profiler__.stop_profile Profiler__.print_profile(STDOUT) "done" end def do_it_fast 1.upto(100){ Math.sqrt(rand) } end def do_it_slow 1.upto(100_000){ (Math.sqrt(rand)).ceil } end #=> In the console: #=> % cumulative self self total #=> time seconds seconds calls ms/call ms/call name #=> 68.45 2.82 2.82 3 940.00 1373.33 Integer#upto #=> 11.41 3.29 0.47 100200 0.00 0.00 Kernel.rand #=> 10.92 3.74 0.45 100000 0.00 0.00 Float#ceil #=> 9.22 4.12 0.38 100200 0.00 0.00 Math.sqrt #=> 0.00 4.12 0.00 2 0.00 5.00 Object#do_it_fast #=> 0.00 4.12 0.00 1 0.00 4110.00 Object#do_it_slow #=> 0.00 4.12 0.00 1 0.00 4120.00 #toplevel