Objective-C to plain c Улучшения производительности игр iPhone - PullRequest
1 голос
/ 23 августа 2010

Я тестирую 2D-игру для iPhone на базе OpenGL ES на iPhone 3G и iPhone 4. Она отлично работает на iPhone 4 ... и довольно хорошо на 3G. Состояние игры обновляется при 60 Гц ... и рендеринг выполняется при 60 кадрах в секунду. Может ли следующее преобразование из Objective-C в c улучшить производительность вообще?

// current Objective-C function
- (void) updateSomething {
    // simple update like x_position += 2.0;
}

// plain c function
void updateSomething(){
    // simple update like x_position += 2.0;
}

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

Ура!

Редактировать: после запуска с инструментом CPU Sampler в XCode похоже, что около 65% вызовов функций приходится на mach_msg_trap . objc_msgSend , очевидно, занимает тривиальное количество ресурсов.

1 Ответ

2 голосов
/ 23 августа 2010

Ответ таков: зависит, но, вероятно, нет. Когда вы смотрите на эти числа, вызовы методов выглядят дорого (они в два раза медленнее!), Но если вы посмотрите на это в контексте реальной программы, реальный вывод состоит в том, что как вызовы функций, так и вызовы методов в большинстве случаев абсолютно бесплатны.

Создание чего-то, что называется 60 раз в секунду, занимает на 100 наносекунд меньше за звонок - это бессмысленная микрооптимизация на процессоре, столь же мощном, как у оригинального iPhone - несколько миллионных долей секунды в секунду. В реальных программах попадание, которое вы получаете для вызова метода по сравнению с функцией, будет уменьшено фактическим содержанием метода.

Что нужно сделать, это профилировать ваше приложение и посмотреть, где на самом деле тратится больше времени. Используйте эту информацию для улучшения алгоритмов, которые занимают больше всего времени. Вот как вы получите настоящее улучшение. По всей вероятности, самого objc_msdSend не будет рядом с самым большим преступником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...