Benchmark module in Ruby

By: Emiley J. Emailed: 1757 times Printed: 2445 times    

Latest comments
By: rohit kumar - how this program is work
By: Kirti - Hi..thx for the hadoop in
By: Spijker - I have altered the code a
By: ali mohammed - why we use the java in ne
By: ali mohammed - why we use the java in ne
By: mizhelle - when I exported the data
By: raul - no output as well, i'm ge
By: Rajesh - thanx very much...
By: Suindu De - Suppose we are executing

The Benchmark module provides methods to measure and report the time used to execute Ruby code.

  • Measure the time to construct the string given by the expression "a"*1_000_000:
        require 'benchmark'
    
        puts Benchmark.measure { "a"*1_000_000 }
    

    On my machine (FreeBSD 3.2 on P5, 100MHz) this generates:

        1.166667   0.050000   1.216667 (  0.571355)
    

    This report shows the user CPU time, system CPU time, the sum of the user and system CPU times, and the elapsed real time. The unit of time is seconds.

  • Do some experiments sequentially using the bm method:
        require 'benchmark'
    
        n = 50000
        Benchmark.bm do |x|
          x.report { for i in 1..n; a = "1"; end }
          x.report { n.times do   ; a = "1"; end }
          x.report { 1.upto(n) do ; a = "1"; end }
        end
    

    The result:

               user     system      total        real
           1.033333   0.016667   1.016667 (  0.492106)
           1.483333   0.000000   1.483333 (  0.694605)
           1.516667   0.000000   1.516667 (  0.711077)
    
  • Continuing the previous example, put a label in each report:
        require 'benchmark'
    
        n = 50000
        Benchmark.bm(7) do |x|
          x.report("for:")   { for i in 1..n; a = "1"; end }
          x.report("times:") { n.times do   ; a = "1"; end }
          x.report("upto:")  { 1.upto(n) do ; a = "1"; end }
        end
    

The result:

                    user     system      total        real
       for:     1.050000   0.000000   1.050000 (  0.503462)
       times:   1.533333   0.016667   1.550000 (  0.735473)
       upto:    1.500000   0.016667   1.516667 (  0.711239)
  • The times for some benchmarks depend on the order in which items are run. These differences are due to the cost of memory allocation and garbage collection. To avoid these discrepancies, the bmbm method is provided. For example, to compare ways to sort an array of floats:
        require 'benchmark'
    
        array = (1..1000000).map { rand }
    
        Benchmark.bmbm do |x|
          x.report("sort!") { array.dup.sort! }
          x.report("sort")  { array.dup.sort  }
        end
    

    The result:

         Rehearsal -----------------------------------------
         sort!  11.928000   0.010000  11.938000 ( 12.756000)
         sort   13.048000   0.020000  13.068000 ( 13.857000)
         ------------------------------- total: 25.006000sec
    
                     user     system      total        real
         sort!  12.959000   0.010000  12.969000 ( 13.793000)
         sort   12.007000   0.000000  12.007000 ( 12.791000)
    
  • Report statistics of sequential experiments with unique labels, using the benchmark method:
        require 'benchmark'
    
        n = 50000
        Benchmark.benchmark(" "*7 + CAPTION, 7, FMTSTR, ">total:", ">avg:") do |x|
          tf = x.report("for:")   { for i in 1..n; a = "1"; end }
          tt = x.report("times:") { n.times do   ; a = "1"; end }
          tu = x.report("upto:")  { 1.upto(n) do ; a = "1"; end }
          [tf+tt+tu, (tf+tt+tu)/3]
        end
    

    The result:

                      user     system      total        real
         for:     1.016667   0.016667   1.033333 (  0.485749)
         times:   1.450000   0.016667   1.466667 (  0.681367)
         upto:    1.533333   0.000000   1.533333 (  0.722166)
         >total:  4.000000   0.033333   4.033333 (  1.889282)
         >avg:    1.333333   0.011111   1.344444 (  0.629761)
    

Ruby Home | All Ruby Tutorials | Latest Ruby Tutorials

Sponsored Links

If this tutorial doesn't answer your question, or you have a specific question, just ask an expert here. Post your question to get a direct answer.



Bookmark and Share

Comments(0)


Be the first one to add a comment

Your name (required):


Your email(required, will not be shown to the public):


Your sites URL (optional):


Your comments:



More Tutorials by Emiley J.
Error generating R.java from manifest
ERROR 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client
IIS and Tomcat - how to configure to work together
PHP Warning: Unknown(): Unable to load dynamic library '/usr/local/php4/lib/php/extensions/no-debug ......
Adding your own Application icon for your J2ME application (jar file)
Creating Menus in Code using VB.net
Traversing all files in a directory using Ruby
Using Proxy to connect to URLs in Ruby
POST a form in Ruby
Reading URL content using Ruby (HTTP)
dRuby client/server mode sample program
Benchmark module in Ruby
encoding and decoding in Ruby using Base64 Module
Module Abbrev in Ruby
Standard Library Packages in Ruby

More Tutorials in Ruby
Standard Library Packages in Ruby
Module Abbrev in Ruby
encoding and decoding in Ruby using Base64 Module
Benchmark module in Ruby
benchmark(caption = "", label_width = nil, fmtstr = nil, *labels) {|report| ...} in Ruby
bm(label_width = 0, *labels) {|report| ...} in Ruby
bmbm(width = 0) {|job| ...} in Ruby
CGI class in Ruby
URL encode a string in Ruby
escapeElement() in Ruby
escapeHTML() in Ruby
new(type = "query") in Ruby
parse(query) in Ruby
pretty() in Ruby
Format a Time object as a String in Ruby

More Latest News
Most Viewed Articles (in Ruby )
Open and manipulate CSV files in Ruby
encoding and decoding in Ruby using Base64 Module
URL decode a string in Ruby
Reading URL content using Ruby (HTTP)
Command-line Arguments in Ruby on rails
Benchmark module in Ruby
if . . . elsif . . . else in Ruby on rails
date and time in Ruby
SimpleDelegator in Ruby
dRuby client/server mode sample program
POST a form in Ruby
Reading emails using POP3 in Ruby
Sending emails using SMTP in Ruby
Sending emails and Receiving emails using Ruby On rails
Getting started with Ruby on rails
Most Emailed Articles (in Ruby)
CGI class in Ruby
Getting started with Ruby on rails
Prompts, Command Lines, Prompts, and irb in Ruby on rails
Naming conventions in Ruby on rails
Command-line Arguments in Ruby on rails
Methods in Ruby on rails
if . . . elsif . . . else in Ruby on rails
unless in Ruby on rails
The Question Mark Operator in Ruby on rails
Standard Library Packages in Ruby
Module Abbrev in Ruby
encoding and decoding in Ruby using Base64 Module
Benchmark module in Ruby
benchmark(caption = "", label_width = nil, fmtstr = nil, *labels) {|report| ...} in Ruby
bm(label_width = 0, *labels) {|report| ...} in Ruby