Objective-C to plain c Повышение производительности игры iPhone

Я тестирую 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
задан MrDatabase 23 August 2010 в 05:20
поделиться

1 ответ

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

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

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

2
ответ дан 2 September 2019 в 21:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: