2011-04-15 47 views
2

我有一个很难处理数字的gem:它从图像中剪出“有趣”的部分。为此,我设置了几个算法。总的来说,它表现糟糕。显然,我想改善:)。独立Ruby代码(宝石)的性能和资源测试

我想测试和测量三样东西:

  • 内存使用
  • CPU使用率
  • 的方法/例行花费的总时间。

我想调查这一点,并比较各种算法,参数和设置的值。

是否有一些Ruby功能,一个宝石或类似的东西,这将允许我运行我的代码,更改一些参数或一些代码,再次运行它,然后比较结果?

我有测试:单位和应该已经到位,所以如果有东西使用这些测试框架,那很好。

回答

3

您可以使用标准的'profiler'库。它报告你在每种方法中花费的时间。

require 'profiler' 

def functionToBeProfiled 
    a = 0 
    1000.times do |i| 
    a = a + i * rand 
    end 
end 

Profiler__::start_profile 
functionToBeProfiled 
Profiler__::stop_profile 
Profiler__::print_profile($stdout) 

这将产生以下输出:

% cumulative self    self  total 
time seconds seconds calls ms/call ms/call name 
16.58  0.03  0.03  1 31.00 93.00 Integer#times 
16.58  0.06  0.03  1000  0.03  0.03 Kernel.rand 
    8.56  0.08  0.02  3  5.33 10.33 RubyLex#identify_identifier 
    8.56  0.09  0.02  10  1.60  6.20 IRB::SLex::Node#match_io 
    8.56  0.11  0.02  84  0.19  0.19 Kernel.=== 
    8.56  0.13  0.02  999  0.02  0.02 Float#+ 
    8.56  0.14  0.02  6  2.67  5.33 String#gsub! 

不过要小心,因为这个库会阻碍你的应用程序的性能。您从中获得的测量结果只有与使用相同方法获得的其他测量结果相比才有用。它们不能用于评估绝对测量值。

+0

在这里找到了一个不错的howto:http://ruby.about.com/od/advancedruby/a/profile.htm – berkes 2011-04-18 15:02:34

0

我做了很好的经验与红宝石教授:

http://ruby-prof.rubyforge.org/

还有在网络上某处分析的各种方法好介绍的,但我不记得书名和作者,并有现在很难找到它... :-(

+0

我用它和它一起玩,但它有很多小故障和错误,而真正有趣的部分(对我而言)需要修补和重新编译的ruby,对于快速测试来说,相当多的工作:) – berkes 2011-04-18 15:00:08