2011-11-29 36 views
0

什么是DRYest基准测试方法,使用ruby Benchmark stdlib或相当的宝石对几个矩阵进行基准测试?举例来说,如果我是标杆一些SQL,我可能会想尝试的套表的大小,各种查询,查询的数量等的所有组合针对多个矩阵的红宝石基准测试

回答

3
require 'benchmark' 

table_sizes = [100, 1000] 
queries = ["QUERY1", "QUERY2"] 
num_queries = [1, 2, 3] 
combis = table_sizes.product(queries, num_queries) 

Benchmark.bm(20) do |x| 
    combis.each do |combi| # or |size,query,num| and use those 
    x.report(combi.inspect){ sleep rand } #do something with combi 
    end 
end 

输出:

      user  system  total  real 
[100, "QUERY1", 1]  0.000000 0.000000 0.000000 ( 0.524222) 
[100, "QUERY1", 2]  0.000000 0.000000 0.000000 ( 0.075334) 
[100, "QUERY1", 3]  0.000000 0.000000 0.000000 ( 0.041683) 
[100, "QUERY2", 1]  0.000000 0.000000 0.000000 ( 0.227865) 
[100, "QUERY2", 2]  0.000000 0.000000 0.000000 ( 0.558131) 
[100, "QUERY2", 3]  0.000000 0.000000 0.000000 ( 0.284121) 
[1000, "QUERY1", 1] 0.000000 0.000000 0.000000 ( 0.496799) 
[1000, "QUERY1", 2] 0.000000 0.000000 0.000000 ( 0.304552) 
[1000, "QUERY1", 3] 0.000000 0.000000 0.000000 ( 0.918314) 
[1000, "QUERY2", 1] 0.000000 0.000000 0.000000 ( 0.332485) 
[1000, "QUERY2", 2] 0.000000 0.000000 0.000000 ( 0.379680) 
[1000, "QUERY2", 3] 0.000000 0.000000 0.000000 ( 0.804835) 
+0

虽然你的' inspect'是显示'product'结果的好方法,您可能想要证明您可以将'each'的块参数中的'combi'数组解析为明确的'size,query,num'变量。 – Phrogz

+0

这很棒!比我使用的嵌套循环更好:) – bloudermilk