Оптимизация кода

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
Reply

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

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

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

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

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 игроков сервер не лагал
Reply

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 и получеш насколько эта проверка будет делать мне лаг ежесекундно.
Reply

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

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


Forum Jump:


Users browsing this thread: 4 Guest(s)