Профилирование MacRuby приложения с использованием инструментов
Я хочу перенести приложение на MacRuby, чтобы его было легче распространять как приложение, а также иметь возможность использовать собственный AppleScript (ScriptingBridge) вместо того, чтобы требовать от пользователей наличия XCode для установки бинарного гема и т. Д. Мое приложение использует bibtex-ruby и citeproc-руби, и оба этих драгоценных камня очень медленно на MacRuby. Тест в bibtex-ruby медленнее в 100 раз, и даже для использования citeproc-ruby требуется 4-5 с. Я работаю с автором этих двух драгоценных камней, чтобы выяснить, как их оптимизировать, и ему потребовался вывод ruby-prof. Это не работает с MacRuby, но вместо этого были предложены XCode и Instruments. Я могу запустить Instruments, но есть множество вариантов, и я не знаю, как настроить его так, чтобы я мог получить полезную информацию о том, какие подпрограммы занимают большую часть времени.
Как я могу использовать инструменты для профилирования приложения MacRuby с гемами? (Или любые другие подходы тоже приветствуются)
2 ответа
Некоторые предложения, не связанные с необходимостью решения проблем с производительностью из драгоценных камней:
Если вы можете выделить точки, в которых вызывается функциональность драгоценного камня (или подозрительная особая функциональность драгоценного камня), вы можете вставить следы старой школы, которые измеряют время до и после вызова, а затем подсчитать их в журнале после нескольких запусков.
Если вы хотите использовать Instruments, вы можете создать шаблонный класс objc, который запускает функциональность gem, так что вы можете найти их в графе вызовов по профилировщику времени по имени, а не по адресам методов macruby.
В обоих случаях, вероятно, было бы полезно подробно понять, какой вид и уровень информации о профиле нужен разработчику, чтобы воспроизвести информацию профилирования одинаковой природы с помощью различных инструментов из-за вашей ситуации совместимости.
Альтернативой является использование DTrace, как предлагается здесь:
Откройте два окна терминала, в первом типе, $ your-benchmark-script.rb &, запомните PID, а затем во втором типе окна, $ sudo dtrace -s path-to-macruby-source/sample-macruby/DTrace/methods_duration.d -p pid. Возможно, вам понадобится добавить несколько секунд паузы в начале сценария тестирования, чтобы у вас было время набрать во втором окне.
(есть также методы-кол-во и объекты-собранные).
До сих пор не удалось полностью решить мою начальную проблему, но это добавило полезную информацию. Одна проблема заключается в том, что невозможно выполнить выполнение в MRI и MacRuby, потому что вы не можете использовать DTrace с MRI (насколько я знаю).