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