SA-MP Forums Archive
Оптимизация кода - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Оптимизация кода (/showthread.php?tid=153915)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13


Re: Оптимизация кода - Jon_De - 04.08.2011

Quote:
Originally Posted by White_116
View Post
смысл всего этого в том , что не создаёт так как написано!
так и не создастся, пробуй const (не знаю будет или нет), а так define


Re: Оптимизация кода - White_116 - 04.08.2011

так и не создастся, а я то думал... Как всегда, пойду лесом.


Re: Оптимизация кода - Stepashka - 04.08.2011

Нельзя создать переменную с динамическим размером, это вам не PHP.


Re: Оптимизация кода - [SnoowkeR] - 05.08.2011

Quote:
Originally Posted by Stepashka
View Post
Нельзя создать переменную с динамическим размером, это вам не PHP.
Есть плагин для динамических массивов, array как-то там.


Re: Оптимизация кода - Stepashka - 05.08.2011

Quote:
Originally Posted by [SnoowkeR]
View Post
Есть плагин для динамических массивов, array как-то там.
Речь идет про плагин? Нет. Вопрос: чего выскакиваем "не к колу, не к забору"?!


Re: Оптимизация кода - Baks - 07.08.2011

Немного странный вопрос, но все же рискну задать.
Правильнее использовать GetMaxPlayers() или MAX_PLAYERS?


Re: Оптимизация кода - Jon_De - 07.08.2011

Quote:
Originally Posted by Baks
View Post
Немного странный вопрос, но все же рискну задать.
Правильнее использовать GetMaxPlayers() или MAX_PLAYERS?
#undef MAX_PLAYERS
#define MAX_PLAYERS кол-во игроков

думаю это несложно , никакого смысла в GetMaxPlayers не вижу


Re: Оптимизация кода - Baks - 07.08.2011

Так и сделал, просто GetMaxPlayers разве не определяет кол-во игроков онлайн?
Не всегда же слоты забиты до отказа. )


Re: Оптимизация кода - Norck - 07.08.2011

Quote:
Originally Posted by Baks
View Post
GetMaxPlayers разве не определяет кол-во игроков онлайн?
Нет. GetMaxPlayers() возвращает текущее количество слотов.


Re: Оптимизация кода - Baks - 07.08.2011

Благодарю, вопрос иссяк. =)


Re: Оптимизация кода - HappyScripter - 07.08.2011

храните все онлайн ИДы в начале массива, который должен быть размером MAX_PLAYERS


Re: Оптимизация кода - Jon_De - 07.08.2011

Quote:
Originally Posted by HappyScripter
Посмотреть сообщение
храните все онлайн ИДы в начале массива, который должен быть размером MAX_PLAYERS
Зачем это нужно?

Код:
for( new i; i < MAX_PLAYERS; i ++)
{
     if(!IsPlayerConnected(i)) continue;
     // твой код
}
всё, этого достаточно


Re: Оптимизация кода - Stepashka - 07.08.2011

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
Зачем это нужно?

Код:
for( new i; i < MAX_PLAYERS; i ++)
{
     if(!IsPlayerConnected(i)) continue;
     // твой код
}
всё, этого достаточно
Потому что выполнить придется не 500 операций из которых большинство будет бесполезных проверок if(!IsPlayerConnected(i)) continue; кстати тотнимающих время, а только необходимое число тех кто в онлайне.


Re: Оптимизация кода - Jon_De - 07.08.2011

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Потому что выполнить придется не 500 операций из которых большинство будет бесполезных проверок if(!IsPlayerConnected(i)) continue; кстати тотнимающих время, а только необходимое число тех кто в онлайне.
Эта проверка слишком быстро выполняется, чтобы е**ся с какими то массивами

Код:
 		new count = GetTickCount();
 		for ( new i; i < 1000000; i ++ )
 		{
 			if (IsPlayerConnected(playerid)) {}
		}
		printf("IsPlayerConnected: %d", GetTickCount() - count);
[22:55:24] IsPlayerConnected: 118
[22:55:26] IsPlayerConnected: 138


Re: Оптимизация кода - Stepashka - 07.08.2011

А теперь сделай так:
if (!IsPlayerConnected(i)) continue;

И сравни это скажем с циклом в котором в пять раз меньше итераций и вообще нет этой проверки.

Как по твоему зачем народ изобрел foreach, наверно не с пустого места было решено, а давайте хранить в массиве ИД только тех кто в онлайне, а не бегать по всем 500 ячейкам.


Re: Оптимизация кода - Romanius - 07.08.2011

Железо может быть разное. Например я на своем ноуте с пентиум 4 могу показать плохие результаты, а на настольном с атлоном x2 результаты будут выше в несколько раз, а на core i7 вооще, не успеешь глазом маргнуть. Но суть не в этом. Храни иды в массиве, или, даже лучше, в бинарных деревьях (если данных, по которым будешь искать, много)


Re: Оптимизация кода - Jon_De - 07.08.2011

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
А теперь сделай так:
if (!IsPlayerConnected(i)) continue;

И сравни это скажем с циклом в котором в пять раз меньше итераций и вообще нет этой проверки.
Код:
 		new count = GetTickCount();
 		for(new i; i < 1000000; i ++)
 		{
 			if(!IsPlayerConnected(100)) continue;
		}
		printf("IsPlayerConnected: %d", GetTickCount() - count);
IsPlayerConnected: 95
IsPlayerConnected: 95
IsPlayerConnected: 98


Quote:
Originally Posted by Stepashka
Посмотреть сообщение
И сравни это скажем с циклом в котором в пять раз меньше итераций и вообще нет этой проверки.
А как по-твоему работают сервера с онлайном 300-500 без единого лага? При онлайне 500 никакой foreach как таковой и не требуется. Я лично делаю всё не зависимо от онлайна, но так, чтобы даже если будет 500 игроков сервер не лагал


Re: Оптимизация кода - Stepashka - 08.08.2011

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
Код:
 		new count = GetTickCount();
 		for(new i; i < 1000000; i ++)
 		{
 			if(!IsPlayerConnected(100)) continue;
		}
		printf("IsPlayerConnected: %d", GetTickCount() - count);
IsPlayerConnected: 95
IsPlayerConnected: 95
IsPlayerConnected: 98



А как по-твоему работают сервера с онлайном 300-500 без единого лага? При онлайне 500 никакой foreach как таковой и не требуется. Я лично делаю всё не зависимо от онлайна, но так, чтобы даже если будет 500 игроков сервер не лагал
ты мыслишь в пределах одного цикла.
Пример из одной моей системы: цикл прогоняет 1500 итераций 2 раза в секунду, в каждой из этих итераций проверяются все игроки. Теперь помнож свои "незначительные" задержки на 3000 и получеш насколько эта проверка будет делать мне лаг ежесекундно.


Re: Оптимизация кода - Jon_De - 08.08.2011

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
ты мыслишь в пределах одного цикла.
Пример из одной моей системы: цикл прогоняет 1500 итераций 2 раза в секунду, в каждой из этих итераций проверяются все игроки. Теперь помнож свои "незначительные" задержки на 3000 и получеш насколько эта проверка будет делать мне лаг ежесекундно.
а представь у тебя 500 игроков будет, и что тогда?


Re: Оптимизация кода - Stepashka - 08.08.2011

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
а представь у тебя 500 игроков будет, и что тогда?
у меня нет проверки if(!IsPlayerConnected(i)) continue;