2016-01-29 1 views
0

Прежде всего, я не могу предложить много подробностей, поэтому я понимаю, что этот вопрос может показаться неполным. На этом этапе я действительно ищу любые идеи. Честно говоря, я просто озадачен этим.Приложение iOS замедляется через несколько секунд, ускоряет резервное копирование, если приостановлено и возобновлено в отладчике

Я создаю графическое приложение, которое действительно выделяет процессор. Использование процессора на устройствах, как правило, составляет около 150% в соответствии с XCode (я знаю, что это звучит странно, возможно, это 200% из-за устройства, имеющего два ядра). Я измерил задачи, которые выполняют большую часть обработки, поэтому я могу видеть, сколько времени они занимают в отладочном выходе. Также обратите внимание, что я компилирую с -Ofast (агрессивная оптимизация), даже для отладочных сборников.

Вот что странно. Около 5-10 секунд в режиме интенсивного использования процессора в приложении все замедляется. Это очень заметно. Из-за моего инструментария я вижу, что внезапно все занимает примерно в 3 раза больше, чем раньше. Он довольно однородный по всем задачам, и он не ускоряется. Вот что странно. Если я нарушу выполнение в отладчике и возобновить, я получаю еще 5-10 секунд быстрого выполнения, прежде чем он снова замедлится.

Рассматривая использование ЦП и памяти, указанное XCode, все остается примерно одинаковым. В любой момент приложение использует не более 90 МБ памяти.

Есть ли функция iOS, которая замедляет приложения с интенсивным использованием процессора или подзаряжает устройство для экономии времени автономной работы? Я понимаю, что я разделяю ресурсы с ОС, но это поведение, которое я могу надежно воспроизвести каждый раз.

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

+2

Вы делаете диск или сеть io? Я могу сопоставить поведение с файловой копией, которая быстро кричит - до тех пор, пока кеши не будут заполнены, и вы будете уменьшены до реального самого медленного элемента. Остановка дает системное время для дыхания (пустые очереди и кеши), и когда вы снова запустите код, произойдет тот же эффект. – thst

+0

Это действительно хорошая идея, но, к сожалению, в это время нет ввода-вывода на диске или сети. –

+2

Насколько горячим является устройство? Это может быть температурный предохранитель? – thst

ответ

0

Прежде всего, спасибо @thst за то, что я очень стараюсь помочь мне. Мой вопрос был немного глупым, поскольку на самом деле это могло быть что угодно.

В конечном итоге я решил проблему путем рендеринга (через OpenGL, деталь, которую я забыл включить, снова показывая, насколько плохо был мой вопрос) только тогда, когда на самом деле происходит изменение состояния объектов и текстур, которые визуализируются. Он использовал для рендеринга на 60FPS все время.

Приложение также использует CIDetector для обнаружения лиц. Я думаю, но я не уверен, что CIDetector использует GPU для его обнаружения. Если это так, возможно, возникли некоторые разногласия в отношении ресурсов графического процессора. Блокировка CIDetector в ожидании может вызвать замедление во всем приложении.

Спасибо всем.

Смежные вопросы