Можно ли игнорировать нерелевантные методы при профилировании приложений ruby?
При использовании 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# каждый.
Можно ли попросить ruby-prof поместить информацию о полученном коде в ClassName#method_name
отчет?
С помощью min_percent
или переключение на плоский профиль, кажется, не помогает.
2 ответа
Версия 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
непосредственно.
Если вы не возражаете против низких технологий, возможно, вы хотите рассмотреть это. Все, что вам нужно - это приостановить отладчик. Гарантированный, он быстро найдет все, что вы можете найти любым другим способом, и не покажет вам никакого ненужного кода.