Использование XCode и инструментов для повышения производительности приложений iPhone - PullRequest
0 голосов
/ 15 февраля 2011

Я экспериментировал с выключенными и включенными инструментами некоторое время и до сих пор не могу сделать следующее (с какими-либо ощутимыми результатами): определить или оценить среднее время выполнения функции, которая вызывается много раз.

Например, если я веду свой игровой цикл с частотой 60 Гц с помощью CADisplayLink, мне бы хотелось узнать, сколько времени занимает цикл в среднем ... 10 мс? 30 мс и т. Д.

Я близко подошел к инструменту "Активность процессора", но результаты противоречивы или не имеют смысла. Профилировщик времени кажется многообещающим, но все, что я могу получить, это "% времени выполнения" ... и я бы хотел фактическое время выполнения.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

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

Фактическое время выполнения может быть:

// activity starts
NSDate* startTime = [NSDate date];

// activity ends
NSLog(@"time elapsed this loop is %f", fabs([startTime timeIntervalSinceNow]));

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

Все, что * в вашем цикле, конечно, влияет на время, но это минимально влияет.

0 голосов
/ 23 мая 2012

Я пробовал Time Profiler, но он не дает вам среднего или общего времени выполнения метода.Он просто говорит вам, сколько времени ваш код тратит на метод во время записи.Он говорит вам, что ваш код тратит много времени на метод, но не говорит вам, связано ли это с тем, что этот метод выполнялся один раз и занимал много времени, или же этот метод вызывался много раз, но выполнялся очень быстро.Если это первое, то вы должны сосредоточиться на том, чтобы сделать метод быстрее.Если это последнее, ваш код должен вызывать метод реже.Вы должны выяснить, что это вы сами.Более сложным является цикл запуска, который имеет входные источники, которые запускают такие события, как служба таймера или ввод-вывод.Они передаются обработчикам, которые могут быть Apple.Если один из обработчиков Apple занимает много времени, Time Profiler показывает его как горячую точку, но если вы не знаете, что делает этот обработчик и почему с этим мало что можно сделать.Материал Apple даже не обязательно вызывается где-нибудь с конца стека вызовов, поэтому вы не можете легко оптимизировать.У меня был больший успех с OpenGL ES Analyzer, поскольку его API-статистика дает вам счетчик вызовов, общее время и среднее время для вызовов OpenGL ES.Не поможет, если вы не используете OpenGL ES.

0 голосов
/ 15 февраля 2011

Вы должны попытаться использовать Акула для определения времени, о котором говорите.

...