Я довольно большой новичок, когда дело доходит до оптимизации. В текущей игре, над которой я работаю, мне удалось оптимизировать функцию и снизить нагрузку на процессор примерно на 0,5%, и это примерно так же «круто», как и раньше.
Моя ситуация такова: я разработал тяжелую физическую игру в MonoTouch, используя библиотеку оболочки XNA под названием ExEn, и, как мне кажется, мне было очень трудно добиться, чтобы игра достигла играбельной частоты кадров на iPhone4. (даже не хочу думать о iPhone3GS на данный момент).
Снижение производительности почти наверняка происходит в физических вычислениях, если я отключаю физику, резко возрастает частота кадров, если я отключаю все, рендеринг, ввод, аудио и просто оставляю физику на производительности, колеблется около 15 кадров в секунду во время физически напряженных ситуаций.
Я использовал инструменты для профилирования производительности, и вот что я получил: http://i.imgur.com/FX25h.png Функции, которые потребляют наибольшую производительность, либо из физического движка (Farseer), либо из вызываемых ими функций оболочки ExEn XNA (особенно Vector2). .Max, Vector2.Min).
Я посмотрел на эти функции и знаю, где это возможно. Farseer передает значения по ссылкам в эти функции, а не по значению, так что это покрыто (и это буквально единственный способ, которым я могу думать. Функции сами по себе очень просты) в сумме на такие операции как
return new Vector2(Max(v1.x, v2.x), Max(v1.y, v2.y))
По сути, я чувствую, что застрял, и из-за моих ограниченных возможностей и понимания оптимизации кода я не уверен, какие у меня есть варианты или есть ли у меня какие-либо варианты (может быть, мне следует просто свернуться в позу эмбриона и плакать? ). С включенным и встроенным релизом LLVM я получаю в лучшем случае 15 кадров в секунду. Мне удалось довести игру до 30 кадров в секунду, снизив физическую точность, но это делает многие уровни просто неиграбельными, поскольку тела пересекаются и падают друг на друга.
Итак, мой вопрос: это проигранное дело или я могу что-то сделать, чтобы повысить производительность?