Re: Оптимизация кода -
Jon_De - 04.08.2011
Quote:
Originally Posted by White_116
смысл всего этого в том , что не создаёт так как написано!
|
так и не создастся, пробуй const (не знаю будет или нет), а так define
Re: Оптимизация кода -
White_116 - 04.08.2011
так и не создастся, а я то думал... Как всегда, пойду лесом.
Re: Оптимизация кода -
Stepashka - 04.08.2011
Нельзя создать переменную с динамическим размером, это вам не PHP.
Re: Оптимизация кода -
[SnoowkeR] - 05.08.2011
Quote:
Originally Posted by Stepashka
Нельзя создать переменную с динамическим размером, это вам не PHP.
|
Есть плагин для динамических массивов, array как-то там.
Re: Оптимизация кода -
Stepashka - 05.08.2011
Quote:
Originally Posted by [SnoowkeR]
Есть плагин для динамических массивов, array как-то там.
|
Речь идет про плагин? Нет. Вопрос: чего выскакиваем "не к колу, не к забору"?!
Re: Оптимизация кода -
Baks - 07.08.2011
Немного странный вопрос, но все же рискну задать.
Правильнее использовать GetMaxPlayers() или MAX_PLAYERS?
Re: Оптимизация кода -
Jon_De - 07.08.2011
Quote:
Originally Posted by Baks
Немного странный вопрос, но все же рискну задать.
Правильнее использовать GetMaxPlayers() или MAX_PLAYERS?
|
#undef MAX_PLAYERS
#define MAX_PLAYERS кол-во игроков
думаю это несложно
![Cheesy](images/smilies/biggrin.png)
, никакого смысла в GetMaxPlayers не вижу
Re: Оптимизация кода -
Baks - 07.08.2011
Так и сделал, просто GetMaxPlayers разве не определяет кол-во игроков онлайн?
Не всегда же слоты забиты до отказа. )
Re: Оптимизация кода -
Norck - 07.08.2011
Quote:
Originally Posted by Baks
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;