[MacRuby] #1048: Performance of Hash with an Array as a key

MacRuby ruby-noreply at macosforge.org
Fri Dec 17 08:10:35 PST 2010


#1048: Performance of Hash with an Array as a key
----------------------------------+-----------------------------------------
 Reporter:  yasuimao@…            |        Owner:  lsansonetti@…        
     Type:  defect                |       Status:  reopened             
 Priority:  blocker               |    Milestone:  MacRuby 0.9          
Component:  MacRuby               |   Resolution:                       
 Keywords:                        |  
----------------------------------+-----------------------------------------
Changes (by yasuimao@…):

  * status:  closed => reopened
  * resolution:  fixed =>


Comment:

 I downloaded the latest nightly (0.9 12/17/2010) and further tested this
 issue.

 This time, I tested this with more than 1 file.

 The two scripts are following:

 '''1 File repeated 10 times'''
 {{{
 hash = Hash.new(0)
 n = 1
 10.times do |i|
   text = File.open("test.txt").read
   words = text.scan(/\w+/)
   (words.length - n).times do |i|
     hash[words[i..n+i].join(" ")] += 1
   end
 end
 }}}


 '''Multiple files'''
 {{{
 require 'find'
 hash = Hash.new(0)
 n = 1
 Find.find(dir) do |file|
   next if File.extname(file) != ".txt"
   text = File.open(file).read
   words = text.scan(/\w+/)
   (words.length - n).times do |i|
     hash[words[i..n+i].join(" ")] += 1
   end
 end
 }}}

 Both tests are repeated with String as a key and Array as a key (the
 sample scripts are with String as a key).
 {{{
 String (Str): hash[words[i..n+i].join(" ")] += 1

 Array (Ary):  hash[words[i..n+i]] += 1
 }}}

 For testing I used the following files:

 {{{
  1 file  -   8,000 words
 10 files -  79,000 words
 18 files - 150,000 words
 }}}


 Also each test was repeated with different number of array elements 2 (n =
 1), 3 (n = 2), and 4 (n = 3).

 '''Results - Ruby 1.8.7'''
 {{{
 n               1       2       3
 1 F rep - Str   0.51    0.54    0.58
 1 F rep - Ary   0.67    0.70    0.72
 10 F - Str      0.63    0.75    0.72
 10 F - Ary      0.63    0.67    0.68
 18 F - Str      1.19    1.39    1.43
 18 F - Ary      1.36    1.37    1.41
 }}}



 '''MacRuby 0.9 nightly 12/17/2010'''
 {{{
 n                1       2        3
 1 F rep - Str    1.73    1.84     1.96
 1 F rep - Ary    1.62    2.04     2.27
 10 F - Str       2.21    2.53     2.46
 10 F - Ary       7.28   20.83    29.15
 18 F - Str       4.35    4.64     5.10
 18 F - Ary      24.68   88.95   131.77
 }}}

 I'm wondering if this issue is still persisting or due to my poor scripts.

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/1048#comment:4>
MacRuby <http://macruby.org/>



More information about the macruby-tickets mailing list