Я работаю над игрой, и скорость игры составляет 60 кадров в секунду, что дает мне около 16 мсек для выполнения того, что мне нужно выполнить. Я обнаружил, что для выполнения определенных путей кода требуется некоторое время. Сначала я подумал, что это должно быть проблемой с выделением / освобождением памяти. Возможно, это так, но я реализовал пул объектов для более тяжеловесных объектов, и это, похоже, мало что дало.
Я вычеркнул обидно большие объекты и заменил их гораздо более простым объектом, но для создания этого объекта все еще требуется около 3 мс. Простой объект состоит из двух пользовательских объектов, 2 массивов и 2 словарей. Большой объект имеет произвольную сложность. Создание более сложных более крупных объектов, по-видимому, занимает линейно больше времени, занимая до 20-30 мс. Во многих случаях в моей игре я могу сделать намного более сложный объект за долю времени. Но почему-то эти конкретные места в коде вызывают серьезное замедление.
Я использую следующий код для профилирования своих функций (изначально из SO):
NSDate* methodStart = [NSDate date];
// My code here.
NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"[CH] executionTime to create %@ = %f", myObject , executionTime );
Насколько я могу убедиться, что я делаю что-то подобное во внутренней и внешней функции, похоже, что может быть серьезное замедление:
Внутренний вызов функции завершен: 4 мс
... нет кода между внутренним и внешним кодом, кроме таймера ...
Внешний вызов функции завершен: 8 мс
Моя текущая теория заключается в том, что между функциями, которые вызывают серьезные замедления, происходит вычисление между ними. Поскольку я новичок в Obj-C / C, я не совсем уверен, каким может быть это замедление. Это может быть многопоточность, это может быть из-за выделения памяти / autorelease / dealloc или какой-либо другой не связанной с этим проблемой. Я попытался получить больше информации от Инструментов с небольшой пользой.
Итак, мой вопрос: это звучит логично? Возможно ли, чтобы между моими функциями происходило какое-то вычисление, которое занимало бы 2-4 мс процессора на ipad2? И если моя теория невозможна, есть идеи, чем она может быть ?