Вопросы

Tony_Cannabis
Свой человек
    for(new i = 0; i < TOTALGZ; i++)

Как можно максимально оптимизировать цикл?

Поделиться сообщением


Ссылка на сообщение

6 ответов на этот вопрос

  • 0
Cawfee
Великий Гуру

@Tony_Cannabis, если только реализовать счетчик с декрементом. Циклы, в которых осуществляется декремент счетчика, требуют на одну машинную команду меньше. Это связано с тем, что при инкременте (i++) необходимо постоянно осуществлять сравнение i и TOTALGZ, на основе результатов которого и осуществлять либо выход из цикла, либо переход к началу цикла. В случае с декрементом (i--) в такой проверке нет необходимости, поскольку там переход осуществляется по значению арифметических флагов, которые автоматически устанавливаются после арифметических операций (в частности, инкремент и декремент).

 

for(new i = TOTALGZ-1; i >= 0; --i)

 

Поделиться сообщением


Ссылка на сообщение
  • 0

В принципе, оптимизировать нужно не само объявление цикла, а количество его итераций и то что в нем выполняется. А инкремент/декремент не так важно, больше дело вкуса кмк. Мне кстати с инкрементом нравится

Поделиться сообщением


Ссылка на сообщение
  • 0
Cawfee
Великий Гуру

@DEST, судя по названию, количество каких-то объектов на сервере (наверняка это какие-нибудь "зеленые зоны") особо и не оптимизируешь. При таком раскладе больше ничего не остается, кроме как забить на сокращение времени исполнения указанного участка кода или перейти к декременту.

 

Думаю, имеет смысл дополнить твои слова советом прочитать про оценку сложности алгоритмов.

Поделиться сообщением


Ссылка на сообщение
  • 0

В принципе да, согласен.

Кстати, можно ещё дополнить понятием преждевременной оптимизации. ^_^

 

Поделиться сообщением


Ссылка на сообщение
  • 0
Tony_Cannabis
Свой человек
for(new i = 0; i < (ORG_ACCESS_CMD_CAPTURE + 1); i++)


так?

for(new i = (ORG_ACCESS_CMD_CAPTURE + 1)-1; i >= 0; --i)

 

Как быть с этим?

for(new i = 0, len = strlen(player_RP_name[playerid]); i < len; i++)
for(new i = 1; i <= gPlaneCount; i++)
or(new i = 0, b = VehicleModelToPaintjobNum(GetVehicleModel(GetPlayerVehicleID(playerid))) + 1; i < b; i++)
for(new idx, i = 0; i < sizeof (TPLIST); i++)
for(new i = 0, itemid; i < sizeof (gSellGunItems); i++)
for(new i; i <= 11; i++)

Если можно пример
 

Поделиться сообщением


Ссылка на сообщение
  • 0
Tony_Cannabis
Свой человек

up, помогите с остальными циклами пожалуйста, очень важно для меня

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Владислав Малиновский
      От Владислав Малиновский
      SWEEK RUSSIA — онлайн игра на телефон с открытым миром, в котором Вы можете создать персонажей вместе со своими друзьями и начать весело проводить время. Вы можете продвигаться по сюжету квестовых миссий или же начать игру с зарабатывания денег в транспортной компании. Создавать организации, подниматься по карьерной лестнице. Заполучив влияние над другими игроками - попробуй себя в роли Президента.
       
      Нам нужны ответственные люди на должность главного администратора. Если вы считаете себя адекватным и ответственным, отпишите в vk.com/devmaksim или t.me/raphmarci.
       
      Официальный сайт проекта - sweekrussia.ru
      Официальный форум проекта - forum.sweekrussia.ru
      Официальное сообщество VK - vk.com/sweekrussia.game
      Официальный TG канал - t.me/sweek_dev
    • bogdan295@gmai
      От bogdan295@gmai
      Здраствуйте, я создавал новую организации когда дело дашло до пикапов они не создаются 
      new lssd1; new lssd2;  else if(pickupid == lssd2)// Вход     {         SetPlayerInteriorEx(playerid,0);         SetPPos(playerid,1567.5510,-1657.9956,5.3859);         SetPlayerFacingAngle(playerid, 500);         return true;     } else if(pickupid == lssd1)// Вsход     {         SetPlayerInteriorEx(playerid,0);         SetPPos(playerid,630.0542,-572.0032,16.3359);         SetPlayerFacingAngle(playerid, 500);         return true;     }     lssd2 = CreatePickupAC(1318,1,626.9653,-571.8394,17.9207, 147); // вход лссд     lssd1 = CreatePickupAC(1318,1,1567.4720,-1660.6494,5.3859, 147); // выход лссд Что я сделал не так?