ブロック内で多くのメソッドを実行し、実行に要した時間を記録し、後で参照できるようにその情報をデータベースに送信するベンチマークのラッピングが含まれています。 。これは非常に醜いコードになります。ベンチマーク用のRubyメタプログラミング
benchmark_data = Benchmark.realtime do
begin
do_something()
rescue StandardError => e
log_errors("error occurred")
raise e
end
end
write_benchmark_data_to_db(benchmark_data)
このコードは、基本的にはベンチマークするすべての関数の周りにコピーされます。メタプログラミングを使用してより良い方法がありますか?私はベンチマークコードをすべてクラスの外に保ち、メソッドの測定をしたいと思います。
私は、誰もが任意のアイデアを持っています
class Foo
def a()
puts "A"
end
... #repeat for b,c,d,e...
end
f = Foo.new()
add_benchmark(f, [:a,:b,:d]) #records a benchmark event each time f.a,f.b, and f.d are called
を考えていましたか?可能であれば、Fooのサブクラスを使用しないでください。ベンチマークが必要なすべてのオブジェクトにサブクラスが必要になるからです。ここで
ベンチマークでコール全体を実行しないと、各メソッドで費やされた時間の内訳が分かりますか? –