Как профилировать время вызова функций инициализатора, когда dyld загружает изображение? - PullRequest
3 голосов
/ 19 сентября 2010

Я сейчас пытаюсь оптимизировать время запуска приложения и в настоящее время хочу сократить время, затрачиваемое загрузчиком образа ОС.

В dyld (1) я нашел две переменные среды: DYLD_PRINT_STATISTICS и DYLD_PRINT_INITIALIZERS.

DYLD_PRINT_STATISTICS заставляет dyld печатать статистику о том, как dyld проводил свое время.Это его вывод, когда я запустил приложение после команды purge.

total time: 5.9 seconds (100.0%)
total images loaded:  130 (101 from dyld shared cache, 0 needed no fixups)
total segments mapped: 105, into 12914 pages with 840 pages pre-fetched
total images loading time: 1.8 seconds (31.0%)
total dtrace DOF registration time: 0.09 milliseconds (0.0%)
total rebase fixups:  137,658
total rebase fixups time: 1.1 seconds (19.4%)
total binding fixups: 28,502
total binding symbol lookups: 1,127, average images searched per symbol: 0.1
total binding fixups time: 452.28 milliseconds (7.6%)
total weak binding fixups time: 188.52 milliseconds (3.1%)
total bindings lazily fixed up: 130 of 1,164
total initializer time: 2.3 seconds (38.7%)
total symbol trie searches:    2611
total symbol table binary searches:    118
total images defining/using weak symbols:  13/65

Очевидно, что вызов функций инициализатора занимает много времени.Поэтому я попытался DYLD_PRINT_INITIALIZERS получить список функций инициализатора.

Я действительно получил их, но у них не было никакой временной информации, такой как отметка времени, только тонны следующих строк:

dyld: calling initializer function 0x25170 in MY_APPLICATE_PATH

Это бесполезно для меня, чтобы найти целевые инициализаторы для оптимизации.

Итак, мои вопросы:

  1. Есть ли какой-нибудь способ сделать dyld печать временных меток?
  2. Если это невозможно, могу ли я использовать что-то еще, чтобы профилировать время вызова функций инициализатора с помощью dyld?DTrace или Instruments применимо здесь?
  3. Любые советы по приведенной выше статистике приветствуются.

Хотя сейчас я работаю над OSX, любые инструменты или полезная информация для WindowsТакже приветствуются.

Спасибо

1 Ответ

0 голосов
/ 20 сентября 2010

Можете ли вы использовать эту технику ?

Я видел медленный запуск большого приложения, которое загружало много библиотек и выполняло много инициализации.Выборка покажет, что происходит, что вы можете исправить, и, вероятно, вас это удивит.

Например, я бы никогда не догадался, сколько времени потратил на настройку интернационализированных строк символов, многие из которых сделалине нужно быть.Другой пример: не только создание и инициализация структур данных, но и уничтожение и их повторное создание без необходимости, поскольку объекты вставляются в меню, древовидные представления и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...