04:26
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 2 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: Dima-kun  
Оптимизация кода
Ghost-XДата: Понедельник, 02.05.2011, 20:55 | Сообщение # 16
Мастер джэдай
Группа: Продвинутые
Сообщений: 3548
Награды: 36
Город: Наб. Челны
Репутация: 856
Замечания: 40%
Статус:
Quote (Eakwarp)
оветую переписать весь фак, без использования неправильных примеров.

И все писать здесь, а не ссылаться на левый форум. Потому что ФАК юзается здесь, а не там. Ок-ок?



Спор на форуме, все равно что олимпиада среди умственно отсталых: даже если ты победил, ты все равно гермофродит.
Хочешь остаться при своем мнении - держи его при себе.
GoshikДата: Понедельник, 02.05.2011, 21:40 | Сообщение # 17
Уверенный в себе
Группа: Пользователи
Сообщений: 280
Награды: 1
Город: ---
Репутация: 18
Замечания: 60%
Статус:
Quote (Fus1)
Goshik, запуститься то он запустить , ну должен по крайне мере

неа, я тоже думал что запустится) а оказывается не запускается, просто ложится сервер сразу

Quote (Ghost-X)

Quote (Impereal)if(a[playerid] == 1) { a[playerid] = 5; } else if(a[playerid] == 2) { a[playerid] = 4; } else if(a[playerid] == 3) { a[playerid] = 7; } else if(a[playerid] == 4) { a[playerid] = 10; } else { a[playerid] = 9; } Главная оптимизация: Code if(a[playerid] == 1) a[playerid] = 5; else if(a[playerid] == 2) a[playerid] = 4; else if(a[playerid] == 3) a[playerid] = 7;   else if(a[playerid] == 4) a[playerid] = 10;   else a[playerid] = 9;

разве убрав скобки скорось работы увеличится?

ImperealДата: Понедельник, 02.05.2011, 21:50 | Сообщение # 18
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2677
Награды: 51
Город: Санкт-Петербург
Репутация: 1868
Замечания: 100%
Статус:
Quote (Goshik)
разве убрав скобки скорось работы увеличится?

Врят ли,но код будет удобнее и без лишего.



Прощай самп-рус =Р
Dima-kunДата: Понедельник, 02.05.2011, 22:03 | Сообщение # 19
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
Goshik, нет не увеличится. А даже может чуть уменьшится как не странно

Code
#include <a_samp>
forward test();
public OnGameModeInit()
{
   SetTimer("test",1000,1);
      return 1;
}

public test()
{
      new count = GetTickCount();
      if(GetMaxPlayers()==50)
   {
    print("50");
   }
      else if(GetMaxPlayers()==500)
    {
     print("500");
   }
      printf("if-else{} %i", GetTickCount() - count);
      count = GetTickCount();
   if(GetMaxPlayers()==50)print("50");
      else if(GetMaxPlayers()==500)print("500");
    printf("if-else %i", GetTickCount() - count);
}

Code
[22:01:57] if-else{} 0
[22:01:57] 500
[22:01:57] if-else 1



Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
ZiGGiДата: Понедельник, 02.05.2011, 22:12 | Сообщение # 20
Мастер джэдай
Группа: Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус:
Quote (Impereal)
Сейчас ещё вспомнил частую ошибку,которую постоянно видел:
Code
if(PlayerAdmin[playerid] > 0){}
else if(PlayerAdmin[playerid] == 0){SendClientMessage(playerid,COLOR_WHITE,"Вы не админ!");}

Зачем делать условие при прохождение котрого,ничего не пройзойдет - это глупо!
Правильный пример:
Code
if(PlayerAdmin[playerid] == 0){SendClientMessage(playerid,COLOR_WHITE,"Вы не админ!");}


эмм, ващето не ==, а <= ...
т.е.
if(PlayerAdmin[playerid] <= 0){SendClientMessage(playerid,COLOR_WHITE,"Вы не админ!");}

Quote (Morino_Reigan)
нет не увеличится. А даже может чуть увеличится как не странно

на скорость работы скобки вообще не влияют, а в тиках есть погрешность...

Quote (toneysix)
GetMaxPlayers - 1315ms (для справки я выставил всего 200 слотов)
Просто 500 игроков - 311ms

оптимизировал твой цикл с getmaxplayers(http://pastebin.com/Qu9uvD9X)
Результат:
getmaxplayers - 353
MAX_PLAYERS - 857
также, при 200 игроках

в идеале, можно и без foreach обойтись, просто записывая самый большой ид игрока в переменную...


Бложе
[indent]Мой блог
Уроки по Pawn
[/indent]

Open-GTO
[indent]Блог разработчиков
GitHub: https://github.com/Open-GTO/Open-GTO
Сборки мода с сервером тут
[/indent]


Сообщение отредактировал ZZiGGi - Понедельник, 02.05.2011, 22:13
toneysixДата: Понедельник, 02.05.2011, 22:22 | Сообщение # 21
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
ZZiGGi это вообще-то не мой код ; )
Здесь уже таким образом поправили товарища.
Morino_Reigan ну ты и проверяешь)



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
GoshikДата: Понедельник, 02.05.2011, 22:38 | Сообщение # 22
Уверенный в себе
Группа: Пользователи
Сообщений: 280
Награды: 1
Город: ---
Репутация: 18
Замечания: 60%
Статус:
Code


stock MaxPlayers;

public OnPlayerConnect(playerid)
{
  if(playerid > MaxPlayers) MaxPlayers = playerid;
  return 1;
}

public OnPlayerDisconnect(playerid)
{
  if(playerid == MaxPlayers)
  {
   for(new i = MaxPlayers - 1; i > 0; i--)
   {
    if(!IsPlayerConnected(i)) continue;
    MaxPlayers = i;
    break;
   }
  }
  return 1;
}

вот так наверно будет лучше всего циклы делать... вроде правильно всё

toneysixДата: Понедельник, 02.05.2011, 22:44 | Сообщение # 23
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Goshik ерунда, просто будет определять наивысший слот, а если игроки будут уходить например под 10-ым айди, а 200 игрок будет в игре? Компенсируется и двойне. К тому же у тебя нулевой игрок не включен. for(new i = MaxPlayers - 1; i >= 0; i--)


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Понедельник, 02.05.2011, 22:46
GoshikДата: Понедельник, 02.05.2011, 22:45 | Сообщение # 24
Уверенный в себе
Группа: Пользователи
Сообщений: 280
Награды: 1
Город: ---
Репутация: 18
Замечания: 60%
Статус:
toneysix, а если под 200 выйдет а под 10 останется?)
CrazyzДата: Понедельник, 02.05.2011, 22:47 | Сообщение # 25
Местный
Группа: Продвинутые
Сообщений: 704
Награды: 70
Город: что?
Репутация: 334
Замечания: 60%
Статус:
Полезный урок для новичков,у меня код давно оптимизирован!


toneysixДата: Понедельник, 02.05.2011, 22:47 | Сообщение # 26
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Goshik до него ещё будет 199 и 198 и прочее. Не выход. Твои условия компенсируются вдвойне и не будет никакой оптимизации.


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
EakwarpДата: Понедельник, 02.05.2011, 23:07 | Сообщение # 27
Мастер джэдай
Группа: Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус:
toneysix, использование последнего ида - не рационально. Ибо вполне возможно что до него игроков не будет, а циклу придется их посчитать.


More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.


Valakas Roleplay on Twitter

Платные консультации, разработка, в ICQ. Дорого.
AirKiteДата: Понедельник, 02.05.2011, 23:24 | Сообщение # 28
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Quote (toneysix)
Увы, но с GetMaxPlayers() за счет вызова функции далеко не лучший вариант.

Quote (toneysix)
Результаты: GetMaxPlayers - 1315ms (для справки я выставил всего 200 слотов) Просто 500 игроков - 311ms http://best.of.by/paste/d1073b89

Ну вообще с вариантом GetMaxPlayers() логично было бы работать в OnGameModeInit() один раз и всё.

Мои результаты:
getmaxplayers - 413 (200 слотов)
MAX_PLAYERS - 920
foreach - 2 (Отличный результат, пока).

new Iterator:MyIterator<500>;
for(new t; t < 500; t++) Iter_Add(MyIterator, t);

правим foreach с Player на MyIterator

Результат:
getmaxplayers - 419
MAX_PLAYERS - 978
foreach - 1309

Code

new Iterator:MyIterator<500>;

new count = GetTickCount(); new MAX_PL=GetMaxPlayers();
for(new t; t < 10000; t++)
     for(new i; i < MAX_PL; i++) if(IsPlayerConnected(i)) continue;
    
printf("getmaxplayers - %d", GetTickCount()-count);

count = GetTickCount();
for(new t; t < 10000; t++)
     for(new i; i < 500; i++) if(IsPlayerConnected(i)) continue;
    
printf("MAX_PLAYERS - %d", GetTickCount()-count);
   
for(new t; t < 500; t++)
     Iter_Add(MyIterator, t);
   
count = GetTickCount();
for(new t; t < 10000; t++)
     foreach(MyIterator, i) if(IsPlayerConnected(i)) continue;

printf("foreach - %d", GetTickCount()-count);

Не бывает магических иклудов способных реально сократить время выполнения операций. (Я имею ввиду тех, у которых и так логика проста).
foreach сам по себе забирает время под вычисления при OnPlayerConnect и Disconnect.


[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
AirKiteДата: Понедельник, 02.05.2011, 23:37 | Сообщение # 29
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Просто выходи так, что боремся за эти 0.04-0.08ms жертвуя 0.5-1ms при каждом подключении отключении игрока.
Это я про foreach.



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record


Сообщение отредактировал AirKite - Понедельник, 02.05.2011, 23:38
Dima-kunДата: Понедельник, 02.05.2011, 23:40 | Сообщение # 30
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
Quote (toneysix)
Morino_Reigan ну ты и проверяешь)

НУ может я не совсем доконца понял функцию GetTickCount. Ну хз. Мб я не до конца разобрался в этой функции



Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
  • Страница 2 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua