display computation time in IRB

J

Jason Lillywhite

Is there an easy way to display the time it takes to compute any
function from within IRB?
 
D

David Wright

Jason said:
Is there an easy way to display the time it takes to compute any
function from within IRB?


If I understand correctly, there is the Benchmark module

http://www.ruby-doc.org/stdlib/libdoc/benchmark/rdoc/classes/Benchmark.html

?> x.report('concat') {s='t ';(1..10000).step do |x| s.concat(x.to_s)
end}
?> x.report('<<') {s='t ';(1..10000).step do |x| s << x.to_s end}Rehearsal ------------------------------------------
concat 0.010000 0.000000 0.010000 ( 0.008603)
<< 0.010000 0.000000 0.010000 ( 0.007354)
--------------------------------- total: 0.020000sec

user system total real
concat 0.000000 0.000000 0.000000 ( 0.006930)
<< 0.010000 0.000000 0.010000 ( 0.007101)
 
C

Chris Shea

Is there an easy way to display the time it takes to compute any
function from within IRB?

It's not unheard of for people to add something like this to their
irbrc:

def time
start = Time.now
result = yield
puts "Completed in #{Time.now - start} seconds."
result
end

In use:

016:0> time { ('a'*10_000_000).sub(/a+/,'hi') }
Completed in 0.446504 seconds.
"hi"

HTH,
Chris
 
J

Joel VanderWerf

Chris said:
It's not unheard of for people to add something like this to their
irbrc:

def time
start = Time.now
result = yield
puts "Completed in #{Time.now - start} seconds."
result
end

In use:

016:0> time { ('a'*10_000_000).sub(/a+/,'hi') }
Completed in 0.446504 seconds.
"hi"

HTH,
Chris

Or something like this:

irb(main):005:0> def time
irb(main):006:1> start = Process.times.inject{|s,x|s+x}
irb(main):007:1> result = yield
irb(main):008:1> finish = Process.times.inject{|s,x|s+x}
irb(main):009:1> puts "Completed in #{finish - start} cpu seconds"
irb(main):010:1> result
irb(main):011:1> end
=> nil
irb(main):012:0> time {sleep 1}
Completed in 0.0 cpu seconds
=> 1
irb(main):013:0> time {1000000.times {1.23**42}}
Completed in 0.57 cpu seconds
=> 1000000
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top