#ios #swift #xcode #instruments
#iOS #swift #xcode #инструменты
Вопрос:
У меня было то, что я бы назвал проблемой производительности моего приложения при запуске на старом оборудовании (iPad mini 2, которому около 7 лет). К сожалению, это кажется спорадическим, когда 2/10 раз все работает нормально, а в остальном загрузка ЦП со временем увеличивается до 90%.
Приложение выполняет некоторые интенсивные (?). drawRect материалы, в которых я использую bezierpath для рисования диаграммы сердечного ритма (среди прочего). Использование инструментов на самом деле не показывает мне, где возникает возможное узкое место. (TBH, я не очень хорошо читаю выходные данные)
(для этого изображения я использовал ‘инвертировать дерево вызовов’, ‘скрыть системные библиотеки’
Я попытался ввести собственное профилирование времени
let start = CFAbsoluteTimeGetCurrent()
let end = CFAbsoluteTimeGetCurrent() - start
print("drawRect END:(Date()) - total Secs:(end)")
и хотя это медленнее, чем мой iPhone 7, я думаю, что это все еще приемлемо.
drawRect END:2021-01-16 00:39:26 0000 - total Secs:0.002599000930786133
drawRect END:2021-01-16 00:39:27 0000 - total Secs:0.001813054084777832
drawRect END:2021-01-16 00:39:28 0000 - total Secs:0.0019180774688720703
drawRect END:2021-01-16 00:39:29 0000 - total Secs:0.0016759634017944336
В конце концов, я нашел этот пост -> https://developer.apple.com/forums/thread/19936 и когда я запустил запуск как «release», высокая загрузка процессора в основном исчезла.
Вопрос:
- Во время обычной разработки приложения я согласен, что запуск как Debug был бы полезен, но какова реальная выгода? Чем отличается конфигурация отладки? (Некоторые материалы для чтения / ссылки были бы хороши) TQ
- Если инструменты работают как конфигурация «release«, то как на самом деле можно выяснить, что происходит под капотом? Как и в моем случае, я понятия не имел, что Instruments работает как «release«, а обычный запуск (Cmd-R) выполняется как «Debug«. Это большое несоответствие и, очевидно, сбило меня с толку.
- Итак .. у меня проблема или нет? Весьма вероятно, что я это делаю, но я, хоть убей, не могу понять, почему.
- iPad Mini2 определенно старый и медленный. Я загрузил какое-то приложение для мониторинга процессора / системы из магазина и, просто запустив его, я уже вижу 40% загрузки ЦП (!!) Есть ли способ собирать данные об использовании ЦП в приложении? как в инструкции Print.
Спасибо.
Комментарии:
1. Я бы рекомендовал вам просмотреть все видеоролики WWDC об инструментах. В частности, те, в которых рассказывается о том, как использовать
os_signpost
для количественной оценки производительности критически важных областей вашего кода. Оттуда вы можете работать над улучшением производительности и иметь возможность проверять, действительно ли они помогают, а не ухудшают ситуацию.
Ответ №1:
- Преимущество конфигурации отладки в том, что она позволяет отлаживать ваше приложение. Конфигурация отладки позволяет вам видеть такие вещи, как значения переменных. Если вы попытаетесь отладить свое приложение с конфигурацией Release, вы увидите адреса памяти вместо имен переменных. Конфигурация сборки отладки жертвует скоростью для возможности отладки. Конфигурация сборки релиза жертвует отладкой ради скорости.
- Если вы хотите увидеть проблему, с которой вы сталкиваетесь при запуске в конфигурации отладки, отредактируйте схему вашего проекта и сообщите Xcode использовать конфигурацию отладки для профилирования. Затем инструменты могут помочь вам найти медленные места в коде в конфигурации отладки.
- Сосредоточьтесь на профилировании времени для конфигурации сборки релиза, конфигурации, которую увидят люди, использующие ваше приложение.
- Взгляните на ссылки на os и OSLog framework в документации Apple, которую вы можете прочитать в Xcode, выбрав Справка> Документация разработчика. Фреймворки os и OSLog находятся в разделе System. Эти фреймворки — это то, как вы собираете данные профилирования из своего кода.
Для более подробного описания инструмента Time Profiler прочитайте следующую статью:
Поиск медленных мест в вашем коде с помощью инструмента Time Profiler
Комментарии:
1. Я пытался использовать профилировщик для конфигурации выпуска, но я просто не могу понять, в чем проблема. (факт — не знаю, как)
2. Ваше приложение медленно запускается в конфигурации сборки релиза? Вы сказали, что у вас проблема, когда ваше приложение запускается в конфигурации отладки. Возможно, у вас нет проблем с конфигурацией релиза. Я обновил свой ответ ссылкой на статью об использовании инструмента Time Profiler.
3. Приложение, похоже, отлично работает в конфигурации сборки релиза. Похоже, что при запуске профилировщика времени в инструментах не возникает никаких проблем (насколько я могу судить) (см. Скриншот в исходном сообщении). Хотя загрузка ЦП (в соответствии с рисунком) показывает много пиков до 80% загрузки ЦП. (Есть ли способ заставить TimeProfiler отображать загрузку ЦП так же, как на экране в Xcode?) [и спасибо за ссылку. Я пройду через это и отлажу свое приложение и посмотрю, что я получу.)
4. График для инструмента Time Profiler предоставляет информацию, аналогичную графику использования во времени в Xcode. Я не знаю ни одного способа заставить инструменты отображать два других графика на вашем скриншоте Xcode.