Можно ли игнорировать нерелевантные методы при профилировании рубиновых приложений?
При использовании ruby-prof, напечатанного в режиме graph-html, отчет для одного метода говорит (с некоторым отрывом)
%Total %Self Total Self Wait Child Calls Name Line
52.85% 0.00% 51.22 0.00 0.00 51.22 1 ClassName#method_name 42
51.22 0.00 0.00 51.22 1/3 Hash#each 4200
Очевидно, что это не Hash#each
, что занимает много времени, но блок yield
внутри Hash # каждый.
Глядя на отчет для Hash #, каждый из них запутан, потому что он сообщает обо всем коде, вызываемом любым, использующим Hash # each.
Можно ли запросить ruby-prof поместить информацию о выпущенном коде в отчет ClassName#method_name
?
Использование min_percent
или переход на плоский профиль, похоже, не помогают.
Ответы
Ответ 1
Версия 0.9.0 ruby-prof позволяет устранение метода. Например, чтобы устранить Integer#times
, используйте
result = RubyProf.stop
result.eliminate_methods!([/Integer#times/])
так что
def method_a
5.times {method_b}
end
будет указывать связь между method_a
и method_b
напрямую.
Ответ 2
Если вы не против низкотехнологичных, возможно, вы хотите рассмотреть этот. Все, что вам нужно, это приостановить отладчик. Гарантированный, он быстро найдет все, что вы можете найти любым другим способом, и не покажет вам какой-либо нерелевантный код.