Как один профиль профилирует вызовы не интенсивного использования процессора в инструментах? - PullRequest
0 голосов
/ 06 апреля 2011

Если у меня есть следующий метод, есть ли способ использовать Инструменты 4.0, чтобы сказать мне, что это заняло одну секунду?

- (IBAction)sleepOneSecond:(id)sender 
{
    sleep(1);
}

Прямо сейчас я использую это, чтобы получить желаемый эффект:

- (IBAction)waitOneSecond:(id)sender 
{
    NSDate * startDate = [NSDate date];
    sleep(1);
    NSLog(@"%s took %lf seconds", __FUNCTION__, 
          [[NSDate date] timeIntervalSinceDate:startDate]);
}

Time Profiler и Sampler просто дают время на процессоре, что не помогает в этом случае.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

При использовании инструмента Time Profiler убедитесь, что для него установлено значение «Все отсчеты выборки», а не «Время выполнения выборки» в разделе «Перспектива выборки».

2 голосов
/ 06 августа 2011

Временной профилировщик в инструментах не предназначен для определения точного времени для отдельных вызовов методов. Он периодически проверяет запущенное приложение, чтобы определить, где в вашем коде ЦП выполнял инструкции при взятии образца. Затем он берет все выборки и оценивает, сколько всего времени было потрачено на каждый метод или функцию. Это называется стохастической выборкой, и она не измеряет, когда начинаются и заканчиваются вызовы. Это всего лишь оценка относительного времени, затраченного на различные части кода, и предназначена для определения того, какие части вашей программы ЦП тратит большую часть своего времени, чтобы вы могли сосредоточиться на этих частях для оптимизации. Обычно большую часть времени проводят только в нескольких методах во внутреннем цикле, а тратить время на оптимизацию кода где-либо еще - пустая трата времени, потому что удвоение скорости выполнения только 2% времени делает ваш код на 1% быстрее.

Итак, что-то похожее на то, что вы делаете, - это то, что вам нужно будет сделать, если вы хотите достаточно точно знать, сколько времени занимает выполнение данного раздела кода. Многие люди используют какие-то макросы, чтобы упростить измерение времени, начало и конец, вычислить разницу и записать ее в журнал или сэкономить время от многократного использования этого кода и усреднения. Конечно, проблема с такой техникой заключается в том, что в самом измерении есть некоторые накладные расходы (подумайте Гейзенберг ). Вы можете минимизировать это, проводя измерения до и после без кода между ними и вычитая этот служебный номер из последующих измерений с фактическим кодом между вашими до и после вызовов.

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

...