2

Я использую Xcode 7. iPhone 5s симулятор (iOS 9.0).Почему первый запуск «XCTestCase -measureBlock:» занимает так много времени?

Я пытаюсь использовать XCTestCase -measureBlock: для измерения времени, затраченного на некоторые из моих функций. Это запустит код внутри блока 10 раз и сообщит о результатах, сколько времени занимает каждый пробег, среднее значение, STDEV и т. Д.

Оказывается, что время первого запуска всегда очень высокое, например, 400-500% выше. То же самое происходит для очень простого метода или даже ничего в блоке мер. У меня ничего нет в моих - (void)setUp или - (void)tearDown.

. См. Всплеск в первой строке графика. enter image description here values: [0.000031, 0.000005, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003]

Результат пустой блок. Аналогичные результаты. enter image description here values: [0.000007, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001]

Это ошибка? Что происходит?

ответ

3

Это, вероятно, артефакт разгребания некоторых тайников.

Сценарий Objective-C поддерживает кеш-селектор для каждого класса, например. Это означает, что первый вызов каждого метода несколько медленнее, чем следующие вызовы.

Вы можете просто поместить содержимое измеренного блока прямо перед вызовом до measureBlock:, чтобы проверить, верно ли это. Тогда разогрев не будет измеряться.

+0

Спасибо. Я попробовал, но все равно получаю тот же шаблон. Первый запуск по-прежнему занимает много времени. :( – Hlung

2

Измеряемый блок выполняется десять раз, а тестовый выход показывает среднее время выполнения, а также индивидуальное время выполнения и стандартное отклонение (http://nshipster.com/xctestcase/) Так что в первый раз он может заполнять кеш и готовить данные, если ваш код делает это, на выполните следующие шаги, которые он может выполнить с кэшированными данными, а время выполнения также может быть короче.