2014-04-04 81 views
4

我的Ruby版本是1.9.3p448。「-r profile」和「require'profile'」有什麼區別?

我有一個簡單的程序:

count = 0 
words = File.open('/usr/share/dict/words') 

while word = words.gets 
    word.chomp! 
    count += 1 if word.length == 12 
end 

puts "#{count} twelve-character words" 

當我與ruby -r profile test.rb評價它的輸出是:

7226 twelve-character words 
    % cumulative self    self  total 
time seconds seconds calls ms/call ms/call name 
    9.63  0.44  0.44 119095  0.00  0.00 String#chomp! 
    9.19  0.86  0.42 119095  0.00  0.00 Fixnum#== 
    6.35  1.15  0.29 119095  0.00  0.00 String#length 
    5.91  1.42  0.27 119096  0.00  0.00 IO#gets 
    0.66  1.45  0.03  7226  0.00  0.00 Fixnum#+ 
    0.00  1.45  0.00  2  0.00  0.00 IO#set_encoding 
    0.00  1.45  0.00  1  0.00  0.00 IO#open 
    0.00  1.45  0.00  1  0.00  0.00 File#initialize 
    0.00  1.45  0.00  1  0.00  0.00 Fixnum#to_s 
    0.00  1.45  0.00  2  0.00  0.00 IO#write 
    0.00  1.45  0.00  1  0.00  0.00 IO#puts 
    0.00  1.45  0.00  1  0.00  0.00 Kernel.puts 
    0.00  4.57  0.00  1  0.00 4570.00 #toplevel 

但是,當我在節目的開頭添加require 'profile',然後用ruby test.rb進行評估,輸出結果爲:

7226 twelve-character words 
    % cumulative self    self  total 
time seconds seconds calls ms/call ms/call name 
25.61  0.63  0.63 119095  0.01  0.01 String#chomp! 
16.67  1.04  0.41 119096  0.00  0.00 IO#gets 
    0.00  1.04  0.00  1  0.00  0.00 Fixnum#to_s 
    0.00  1.04  0.00  1  0.00  0.00 IO#open 
    0.00  1.04  0.00  1  0.00  0.00 File#initialize 
    0.00  1.04  0.00  2  0.00  0.00 IO#write 
    0.00  1.04  0.00  1  0.00  0.00 IO#puts 
    0.00  1.04  0.00  1  0.00  0.00 Kernel.puts 
    0.00  2.46  0.00  1  0.00 2460.00 #toplevel 

看來,第二種方式丟失了一些方法,如Fixnum#==,Fixnum#+,String#lengthIO#set_encoding

爲什麼它沒有與第一個結果相同的結果?

+0

我也得到2.1.1p76這個行爲。 – Max

+0

如果我'要求'profile',我也會得到完整的輸出;在irb中加載'test.rb''。所以這在'-r'選項中似乎沒有什麼特別的地方。 – Max

回答