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

Степашка, ты ни где не используешь IsPlayerConnected в цыклах?

хотя при использовании foreach это нормально.
Но я даже при онлайне 300 не использовал foreach, а использовал IsPlayerConnected и лагов не было.
Основные лаги приходятся когда построение кода кривое или где то тачки спаунятся друг на друге, или где то большое скопление народа или машин.

ф-ия format в 1000 раз педальнее всего того, что ты оптимизируешь. А без неё никак.
Reply

Quote:
Originally Posted by DANGER1979
View Post
Степашка, ты ни где не используешь IsPlayerConnected в цыклах?
нет, я бегаю по созданному мной массиву содержащему только ID активных юзверей.
Reply

я с тобой согласен. Это правильно. Просто надо самому типа foreach написать, то тогда будет всё гуд.
Т.к. ******a у меня глючил.

Но я считаю что для игроков можно и IsPlayerConnected применять, а вот для тачек надо действительно делать динамические массивы.
Reply

Я итак свой foreach написал, а от ******a он перегружен лишним.
Reply

Quote:
Originally Posted by Stepashka
View Post
Я итак свой foreach написал, а от ******a он перегружен лишним.
читаем код, и доки и юзаем макросы. и изобретать велосипед не приходица
Reply

Quote:
Originally Posted by Romanius
View Post
читаем код, и доки и юзаем макросы. и изобретать велосипед не приходица
"не учи отца ***ться" © народная мудрость
Reply

Можно как вариант иметь переменную, в которой будет всегда максимальный ИД игрока на данный момент. Тогда пробежаться по ИДам онлайн игроков получиться быстрее

PHP Code:
for ( new id maxPlayerIdid >= 0; --id )
{
    if ( 
IsPlayerConnected(id) )
    {
    }

Но это скорее "золотая середина" в данном вопросе, потому что самым быстрым решением все равно будет непрерывный массив с ИДами онлайн игроков и переменная с индексом последнего ИДа в данном массиве.
Reply

Quote:
Originally Posted by HappyScripter
View Post
и переменная с индексом последнего ИДа в данном массиве.
в сибирь её: заполняешь массиы INVALID_PLAYER_ID, и как только в него уперлись обрываем цикл.
Reply

Quote:
Originally Posted by Stepashka
View Post
в сибирь её: заполняешь массиы INVALID_PLAYER_ID, и как только в него уперлись обрываем цикл.
А зачем тогда эта оптимизация, если Вы заполняете ненужные слоты - заглушками? Их не надо трогать и пусть там лежат какие-то числа от предыдущих изменений массива. Главное знать размер актуальной части массива, который равен кол-ву онлайн игроков.
Reply

Quote:
Originally Posted by HappyScripter
View Post
А зачем тогда эта оптимизация, если Вы заполняете ненужные слоты - заглушками? Их не надо трогать и пусть там лежат какие-то числа от предыдущих изменений массива. Главное знать размер актуальной части массива, который равен кол-ву онлайн игроков.
а какая разница, память то под массив все равно выделена в полном объеме, а по этим ячейкам я все равно не бегаю, и заполнены они при инициализации массива.
Reply

Quote:
Originally Posted by Be$$0n
View Post
http://pastebin.com/3PX67UuZ
Как можно оптимизировать этот код? Из-за него просто напросто виснет компилятор
---------------------------------------------------
Сделал так: http://pastebin.com/xX5KGNur
Компилятор теперь не виснет, но вопрос об оптимизации остался
Компилятор не виснет, он просто долго обрабатывает большой свич. Тем не менее, один хрен, только в профиль, оптимизировать тут нечего.
Reply

Quote:
Originally Posted by Be$$0n
View Post
http://pastebin.com/3PX67UuZ
Как можно оптимизировать этот код? Из-за него просто напросто виснет компилятор
---------------------------------------------------
Сделал так: http://pastebin.com/xX5KGNur
Компилятор теперь не виснет, но вопрос об оптимизации остался
В твоём случае лучше использовать конструкцию if/else - будет быстрее
Reply

Quote:
Originally Posted by eakwarp
View Post
Компилятор не виснет, он просто долго обрабатывает большой свич. Тем не менее, один хрен, только в профиль, оптимизировать тут нечего.
{
Здесь для каждой цены действия разные? Пример покажи что там выполнять именно хочешь
}
Reply

Quote:
Originally Posted by stabker
View Post
{
Здесь для каждой цены действия разные? Пример покажи что там выполнять именно хочешь
}
Да, разные, просто установка значений переменным.
Reply

Quote:
Originally Posted by ZiGGi
View Post
В твоём случае лучше использовать конструкцию if/else - будет быстрее
Как вариант создать массив с ценами. Код будет красивее смотреццо
Reply

Сегодня столкнулся с проблемкой, почему нельзя записывать

PHP Code:
dcmd(Test15cmdtext);
dcmd(Test25cmdtext);
dcmd(Test35cmdtext); 
подобное в строчку? Точнее можно, но максимум 2-3 штуки, если больше, то pawno просто напросто зависает и даже при закрытии остается в работающих процессах...
Reply

При компиляции это заменяется дефайном на другой код. И когда в одной строчке много одинакого заменяемого кода, то компилятор начинает тупить, неправильно заменяет и виснит
Reply

Quote:
Originally Posted by Baks
View Post
Сегодня столкнулся с проблемкой, почему нельзя записывать

PHP Code:
dcmd(Test15cmdtext);
dcmd(Test25cmdtext);
dcmd(Test35cmdtext); 
подобное в строчку? Точнее можно, но максимум 2-3 штуки, если больше, то pawno просто напросто зависает и даже при закрытии остается в работающих процессах...
Там дефайн юзается, поэтому так.

Да и вообще, dcmd - прошлый век же.
Reply

Давно что то тему не поднимали, такой вопрос-
По моим замерам все паблики под глобальными таймерами и циклами(античиты и тд) выполняются за 0.8 мсек где то
OnPlayerCommandText по старинке с strcmp выполняется около 1 мсек в случае ввода несуществующей команды (т.е. пробег по всем strcmp)
OnPlayerText итого меньше (даже замерять не стал)
OnPlayerUpdate примерно 6 мсек рассчитывая на то, что сервер забит

Итого выполнение сценария занимает около 10-15мсек из секунды
Откуда тогда берутся неровности и дергания в синхронизации, особенно когда стоит много игроков в 1 месте, неужели на столько влияют настройки конфига (я его особо не трогал и не настраивал)? Возьмем тот же самп-рп, где в пик онлайна довольно гладко всё идет. Вопрос про хостинг отпадает сразу, он не загружен выше 20%
Reply

Надо проверить пропускную способность хоста, т.к. раздаваемый трафик не прямо пропорционален кол-ву игроков, а каждому игроку сообщает сведения о каждом застримено к нему других игроков, если для некоторой сцены надо вычислить потребляемый трафик (за момент обновления данных, а не n секунд), то вот лови формулу: x * (x-1) * k, где x-игроков в "сцене", k - y байтов переданных клиенту, плюс надо учесть активность каждого игрока за секунду. А там где ты написал - в людных местах бывает много афкшников собирается тем более.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)