Skip to content

Instantly share code, notes, and snippets.

View ono-max's full-sized avatar
💭
I may be slow to respond.

Naoto Ono ono-max

💭
I may be slow to respond.
View GitHub Profile

以下のように depth をキャッシュしておく。b_call, b_return は method_id などで区別がつけられないのでキャッシュしない。’

def get_depth key
  if @depth_map[key]
    return @depth_map[key]
  end
  depth = caller.size
  @depth_map[key] = depth
 depth
トレースなし 0.0031299996189773083 0.004700999706983566 0.0031349998898804188 0.0045289997942745686 0.0030399998649954796
配列2つ 0.14409800013527274 0.149187000002712 0.14717700006440282 0.14608300011605024 0.1501710000447929
配列一つ(shift) 0.14645999995991588 0.13693899987265468 0.15416699973866343 0.15971000026911497 0.148286999668926
リングバッファ 0.1528189997188747 0.1525459997355938 0.15298400027677417 0.15116399992257357 0.15816699992865324

以下のように TracePoint のブロック内の処理を少しずつ追加してベンチマークをとってみる。

  1. トレースなし

  2. ブロックのみ

@tracer = TracePoint.new(:a_call, :a_return, :line){|tp|
}