Измерение производительности iPhone для кода, который запускается только один раз? - PullRequest
2 голосов
/ 02 октября 2009

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

Есть ли инструмент, который я могу использовать для каждой функции при каждом вызове? Что вызывает трассировка вместо статистической выборки?

С уважением, Jochen

Ответы [ 4 ]

8 голосов
/ 02 октября 2009

Вопрос «Существуют ли инструменты для определения времени без выборки для приложений iPhone?» похоже на то, что вы спрашиваете. В своем ответе я указываю на DTrace, который может выполнять профилирование на основе вызовов функций, но, к сожалению, работает только в симуляторе, а не на реальном устройстве. Вы также можете собирать данные с помощью Shark с достаточно небольшим интервалом выборки.

Наконец, код, подобный следующему, можно использовать для определения времени выполнения кода в вашем приложении:

CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();

// Your code here

elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"Elapsed time in seconds: %f", elapsedTime);
2 голосов
/ 18 января 2010

Если у вас есть какой-то большой блок кода, который выполняется недопустимо при однократном вызове, шансы довольно хороши, потому что в нем либо есть несколько трудоемких циклов, либо у вас есть некоторые вызовы неэффективных низкоуровневых функций. Циклические управляющие структуры должны быть легко обнаружены при проверке, а поиск неэффективных низкоуровневых функций, как правило, довольно прост с помощью ручной синхронизации CGAbsoluteTimeGetCurrent () и «бинарного поиска отладки» (узкое место в первой половине блока или второй? Первый квартал или второй квартал? и т. д.)

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

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

0 голосов
/ 07 июля 2011

Команда разработчиков Pulse недавно опубликовала статью о том, как измерить производительность отдельных строк (или более) кода Objective-c: http://eng.pulse.me/line-by-line-speed-analysis-for-ios-apps/

0 голосов
/ 02 октября 2009

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

...