私はアミットの答えを受け入れてきました、その間にそれを行う別の方法を考え出しました。
silence_output
benchmark_result = Benchmark.bm do |x|
x.report do
enable_output
send(test_name)
silence_output
end
end
enable_output
:私は、以下の使用して私の目標を達成することができ、これにより
def silence_output
# Store the original stderr and stdout in order to restore them later
@original_stderr = $stderr
@original_stdout = $stdout
# Redirect stderr and stdout
`touch null.txt`
$stderr = File.new(File.join(File.dirname(__FILE__), 'null.txt'), 'w')
$stdout = File.new(File.join(File.dirname(__FILE__), 'null.txt'), 'w')
end
# Replace stderr and stdout so anything else is output correctly
def enable_output
$stderr = @original_stderr
$stdout = @original_stdout
@original_stderr = nil
@original_stdout = nil
`rm null.txt`
end
:
私は、次のコードを追加した
this questionから
は(少しnull.txt
ファイルにtouch/rm
の呼び出しを含むように修正します)
これを行うより良い方法を見た後、これは非常にハッキリのようです。
ベンチマーク結果を表示していますが、メソッド呼び出しからの出力を見たいですか?私はあなたが何かをベンチマークして、結果を投げ捨てる理由は分かりません。 – tadman
メソッドのベンチマークを要求するときに、メソッドを再度実行する必要がないように、私は 'ベンチマークキャッシング'システムを作成しています。これは具体的には長時間実行されるメソッドのためであり、結果は完全に正確ではないことを認識しています。人々は私の最近の投稿された質問[ここ](http://stackoverflow.com/questions/36961017/how-to-multiply-a-benchmark?noredirect=1#comment61480374_36961017)でこれを何度も教えてくれました。基本的には、テストケースを実行するたびに、後で表示されるベンチマークを保存しています。 –
興味深いプロジェクトです、説明してくれてありがとうございます。私は結果をキャプチャして、後で使用するために何らかの方法で保存できるAmitAのアプローチが最良だと思います。実際にこれらをSQLiteのような小さなデータベースに入れて、必要に応じて整理することができます。 – tadman