开发者

Guidance with benchmarking some string splitting etc

I want to load an array with 1million guids, then loop through them and perform some string operations on each element of the array.

I only want to benchmark the time for the operations I perform on each element of the array, not the time it takes to initialize the array with 1 million rows.

I tried doing a benchmark before, but I didn't understand the output.

How would you do this, I have:

rows = []
(1..1000000).each do |x|
    rows[x] = // some string data
end

n = 50000
Benchmark.bm do |x|

      rows.each do |r|
          # perform string logic here
      end

end

Will this return consistent results? Any guidance/gotcha's I shoul开发者_StackOverflow社区d know about?


Yes, this will return consistent results. You need to report the benchmark, however and (if processing a million rows is too fast) you will need to use your n variable to iterate a few times. (Start with a low n and increase it if your times are in the tenth or hundredths of a second).

require 'benchmark'
# Prepare your test data here
n = 1
Benchmark.bm do |x|
  x.report('technique 1') do
    n.times do
      # perform your string logic here
    end
  end
  x.report('technique 2') do
    n.times do
      # perform your alternative logic here
    end
  end
end

Make sure you run your multiple comparisons in the same Benchmark block; don't write one attempt, write down the numbers, and then change the code to run it again. Not only is that more work for you, but it also may produce incorrect comparisons if your machine is in a different state (or if, heaven forfend, you run one test on one machine and another test on another machine).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜