以下のように 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
end
秒 | |||||
---|---|---|---|---|---|
トレースなし | 0.006363000255078077 | 0.006033000070601702 | 0.004674999974668026 | 0.007385000120848417 | 0.006134000141173601 |
配列2つ | 1.2077299999073148 | 1.2094470001757145 | 1.2031790004111826 | 1.2191599998623133 | 1.1907759997993708 |
キャッシュあり | 0.21491699991747737 | 0.20469100028276443 | 0.21781100006774068 | 0.2144039999693632 | 0.21613700035959482 |