Ruby性能分析-Profile_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Ruby性能分析-Profile

Ruby性能分析-Profile

 2012/6/1 16:45:38  michael_roshen  程序员俱乐部  我要评论(0)
  • 摘要:无意间发现ruby中一个非常实用的gem包----Profile英语比较烂,不知道什么意思,百度一下:1.侧面(像),侧影,2.轮廓,外形;外观;形象,3.纵断面(图),剖面(图)还不如不查,晕菜了。。来看个实例:首先下载profile的gem包geminstallprofile安装成功后运行如下代码:require"profile"classPeterdefinitialize(amt)@value=amtenddefrob(amt)@value
  • 标签:file Ruby 分析

无意间发现ruby中一个非常实用的gem包----Profile

英语比较烂,不知道什么意思,百度一下:1. 侧面(像),侧影,2. 轮廓,外形;外观;形象,3. 纵断面(图),剖面(图)

还不如不查,晕菜了。。

来看个实例:

首先下载profile的gem包

?

?

gem install profile

安装成功后运行如下代码:

?

?

require "profile"
class Peter
  def initialize(amt)
    @value = amt
  end


  def rob(amt)
    @value -= amt
    amt
  end
end

class Paul
  def initialize
    @value = 0
  end


  def pay(amt)
    @value += amt
    amt
  end
end
start_time = Time.now
peter = Peter.new(1000)
paul = Paul.new
1000.times do
 paul.pay(peter.rob(10))
end
end_time = Time.now
puts end_time - start_time

?运行结果让人有点吃惊:

?

0.15625
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 30.13     0.05      0.05        1    47.00   156.00  Integer#times
 30.13     0.09      0.05     1000     0.05     0.06  Paul#pay
 19.87     0.13      0.03     1000     0.03     0.05  Peter#rob
 10.26     0.14      0.02     1000     0.02     0.02  Fixnum#+
  9.62     0.16      0.01     1000     0.01     0.01  Fixnum#-
  0.00     0.16      0.00        2     0.00     0.00  IO#write
  0.00     0.16      0.00        1     0.00     0.00  Kernel.puts
  0.00     0.16      0.00        1     0.00     0.00  Peter#initialize
  0.00     0.16      0.00        2     0.00     0.00  Class#inherited
  0.00     0.16      0.00        1     0.00     0.00  Time#-
  0.00     0.16      0.00        2     0.00     0.00  Time#now
  0.00     0.16      0.00        1     0.00     0.00  Float#to_s
  0.00     0.16      0.00        2     0.00     0.00  Class#new
  0.00     0.16      0.00        1     0.00     0.00  Paul#initialize
  0.00     0.16      0.00        2     0.00     0.00  Time#initialize
  0.00     0.16      0.00        4     0.00     0.00  Module#method_added
  0.00     0.16      0.00        1     0.00   156.00  #toplevel

?这一看,大概知道这个gem是干什么的了,是用来分析函数的执行时间的

?time(%): 该函数执行时间占用总时间的百分比,当然比例越高说明这句可能需要优化

?calls:被调用的次数

?name:对应的函数

?ms//call : 函数执行共用时间

?可以看出,times执行了一次,但是执行时间为156ms, 几乎等于整个程序的执行时间0.15625s,执行了1000次的4个

?函数的用时也很明显,可以用来分析程序的执行效率,是个很不错的东西,而且源代码只有20几kb

?

另外一种运行方式:ruby -rprofile my_program

可以不需要require profile达到同样的目的

?

参考资料:

http://www.caliban.org/ruby/rubyguide.shtml

http://rubydoc.info/gems/profile/0.3.3/frames

?

?

发表评论
用户名: 匿名