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: Оптимизация кода - Aleks10 - 15.07.2010

Quote:
Originally Posted by maccer
Посмотреть сообщение
ты учел что strfind начинает каждый раз перебирать не с начала а с символа идущего после последнего найденного пробела?
угу, в "п.с." же написал результаты


Re: Оптимизация кода - DANGER1979 - 15.07.2010

Считается ли за оптимизацию замена всех переменных integer принимающих значение 0 или 1 на bool?


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

Quote:
Originally Posted by danger1979
Посмотреть сообщение
считается ли за оптимизацию замена всех переменных integer принимающих значение 0 или 1 на bool?
нет, это не влияет на скорость работы.


Re: Оптимизация кода - MX_Master - 16.07.2010

В любом случае, использование правильных и подходящих типов можно считать оптимизацией.


Re: Оптимизация кода - DANGER1979 - 17.07.2010

1. Считается ли за оптимизацию сохранение данных не в текстовые файлы, а в базы данных?
2. Замена двух TextDraw, одним с использованием ~n~?
3. Уничтожение Delete3DTextLabel, DestroyObject, DestroyPlayerObject, DestroyPickup, GangZoneDestroy, DestroyMenu, KillTimer в ф-ии OnGameModeExit?
4. Считается ли за оптимизацию сохранения в файлы только динамически меняющейся информации, а постоянную информацию хранить в массивах самого гейммода, т.е. тем самым уменьшить объём сохраняемых данных?

Нужно ли убивать разовые таймеры или вообще их убивать не то что не нужно, а даже нельзя?


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

1. да (скорее всего это не оптимизация а ускорение работы т.к.это база даннных)
2. конечно же
3. лучше да
4. нет. динамическую лучше хранить в оперативной памяти а то постоянно записывать/читать из файла тоже много времени уходит


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

Вообще сохранять данные нужно только тогда когда ты знаешь что к ним долгое время не будет никакого обращения или сервер отключается.
Например сохранение игроков нужно производить только при дисконекте.
А таких вещей как бизнесы дома и им подобные только в OnGameModeExit


Re: Оптимизация кода - ZiGGi - 17.07.2010

Quote:
Originally Posted by stepashka
Посмотреть сообщение
например сохранение игроков нужно производить только при дисконекте.
а таких вещей как бизнесы дома и им подобные только в ongamemodeexit
работал сервер неделю, вылетел с крэшэм, всё пропало >_<


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

Quote:
Originally Posted by ziggi
Посмотреть сообщение
работал сервер неделю, вылетел с крэшэм, всё пропало >_<
"доверяй, но проверяй", раз в сутки бекапить надо все!


Re: Оптимизация кода - MX_Master - 17.07.2010

сохранять данные на диске нужно не только "по выходу игрока/по завершению мода", а периодически в асинхронные интервалы времени. асинхронные, значит, не все в одно и то же время, а часть в одно время, часть в другое и так далее - можно отрегулировать таймерами.

сами данные в массивах-то у вас могут очень часто меняться, зато сохранение на диск с этих массивов будет происходит редко, например раз в пол часа.

можно делать интервалы сохранения чаще/реже в зависимости от загруженности сервера, зная кол-во онлайн игроков.

дайте волю воображению в оптимизации и вы только выиграете от этого.


Re: Оптимизация кода - DANGER1979 - 10.08.2010


Можно ли по этим данным как-нибудь сделать анализ на сколько отпимизирован мод. Если можно, то как?
Где можно почитать значения всех этих параметров при нажатии в игре F5?
Последние 2 параметра означают: чем выше значение, тем хуже или наоборот?

Про отптимизацию длины строковых переменных не видел, чтобы в этой теме обсуждалось хотя ******
в этой теме https://sampforum.blast.hk/showthread.php?tid=55261 целый мемуар написал . То, что длина строковой переменной 256 - это слишком много и это кощунство. Достаточно, как говорит ******, 128, хотя это не прокатит для переменных info диалогов. У меня в диалогах юзается строковые переменные длиной до 3100.

Ещё вопросик немного не по теме, хотя внешняя оптимизация, тоже оптимизация, как я понял из постов выше.
Кто-нибудь писал ф-ию по правильной табуляции при различных символах в строке одной и той же длинны
Например, чтобы ровно выставить строки после имен игроков, допустим как на этом скрине.



Re: Оптимизация кода - MX_Master - 10.08.2010

Шрифт, который используется в диалогах не является моноширным. Поэтому кол-во пробелов или табуляций в такой таблице правильно выставить весьма сложно. По-моему легче всего заюзать табуляции. Но чтобы достигнуть максимально лучшего результата, нужно знать величину табуляции в окне диалога, а также знать ширину каждого столбца и еще высчитывать длину каждого значения в этом столбце, чтобы не было неверных сдвигов.

Можно найти какое-то решение только тестами. Задача как минимум имеет рейтинг "геморой", но выполнима. Однако времени надо много на эту оптимизацию.

Кстати, показан слишком длинный список, который желательно разбить на неск страниц ( "OK", "Next >" ) или сделать действительно списком.

---

Есть простое правило - использовать ту длину строки/массива, которая реально будет использоваться + небольшой запасик. Например, если в чате не может быть строки длинней 128, а вы хотите в чате написать только " * Привет, имя_игрока", то длина строки не должна превышать 40. В диалогах действительно используются длинные строки и ничего страшного, главное, используйте почти всю длину или сократите ее.


Re: Оптимизация кода - DANGER1979 - 13.08.2010

Можно ли как-то по другому оптимизировать или написать данный код?

pawn Код:
new list_questions[MAX_PLAYERS][10];//список случайных неодинаковых 10 вопросов

new index;
while(index < 10)
{  
    list_questions[playerid][index] = random( 19 );
    new Found;
    for(new i=0; i<10; i++)
    {  
        if( list_questions[playerid][index] == list_questions[playerid][i] && index != i)
        {
            Found = 1; break;
        }
    }
    if(!Found) index++;
}



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

Можно так сделать:
pawn Код:
new index;
while(index < 10)
{
    list_questions[playerid][index] = random( 19 );
    new Found;
    for(new i=0; i<index; i++)
    {
        if( list_questions[playerid][index] == list_questions[playerid][i])
        {
            Found = 1; break;
        }
    }
    if(!Found) index++;
}



Re: Оптимизация кода - Johnny_Xayc - 15.08.2010

Вот занялся конкретной оптимизацией своего мода,но столкнулся с замутками,как будет лучше и быстрее работать?..так:
pawn Код:
for_pl(i)
    {
                    if(!IsPlayerConnected(i))continue;
                    if(TaxiAccepted[i] == 999)continue;
                    if(TaxiAccepted[i] != playerid)continue;
                        TaxiAccepted[i] = 999;
                        GameTextForPlayer(i, "~w~Taxi Caller~n~~r~Left the game", 5000, 1);
                        TaxiCallTime[i] = 0;
                        DisablePlayerCheckpoint(i);
    }
или так:
pawn Код:
for_pl(i)
    {
                    if(!IsPlayerConnected(i) || TaxiAccepted[i] == 999 || TaxiAccepted[i] != playerid)continue;
                        TaxiAccepted[i] = 999;
                        GameTextForPlayer(i, "~w~Taxi Caller~n~~r~Left the game", 5000, 1);
                        TaxiCallTime[i] = 0;
                        DisablePlayerCheckpoint(i);
    }
for_pl(i) - это макрос цикла,думаю сразу понятно)))...


Re: Оптимизация кода - MX_Master - 15.08.2010

второе канеш правильней, если строка недлинная. Если получается длинная, придется переносить все так, чтобы смотрелось читабельно

еще совет заменить все ТАБЫ на пробелы, если у тебя используются ТАБЫ, а также сделать в коде правильные отступы


Re: Оптимизация кода - Johnny_Xayc - 15.08.2010

всмысле ТАБЫ?...и правильные отступы я понимаю для читабельности?....или чтобы варнингов не вылезало что код не правильно построен?
p.s. Спасибо)


Re: Оптимизация кода - MX_Master - 15.08.2010

PHP код:
for_pl(i)
{
    if ( !
IsPlayerConnected(i
        || 
TaxiAccepted[i] == 999 
        
|| TaxiAccepted[i] != playerid ) continue;
    
TaxiAccepted[i] = 999;
    
TaxiCallTime[i] = 0;
    
DisablePlayerCheckpoint(i);
    
GameTextForPlayer(i"~w~Taxi Caller~n~~r~Left the game"50001);

табы, это знаки табуляции


Re: Оптимизация кода - ^Woozie^ - 16.08.2010

помогите с кодом, за лето пробухал все что можно.

Quote:

public OnPlayerUpdate(playerid)
{
new msg[128], animlib[32];
if(GetPlayerAnimationIndex(playerid) && IsPlayerAdmin(playerid))
{
GetAnimationName(GetPlayerAnimationIndex(playerid) ,animlib,32,animNew[playerid],32);
printf("Anim New - %s, Anim Old - %s",animNew[playerid],animOld[playerid]);
if(!strcmp(animOld[playerid],animNew[playerid], true))
{
format(msg, 128, "Running anim: %s - %s", animlib, animOld[playerid]);
SendClientMessage(playerid, COLOR_WHITE, msg);
format(animOld[playerid], 32, "%s", animNew[playerid]);
SetPlayerHealth(playerid,1000);
}
}
return 1;
}

вообщем пишу такую вещь - что при смене анимации показывает новую анимацию игрока.
очень нужно для античита, а то ужасно неудобно когда тебе через OnPlayerUpdate флудит 20 раз в секунду.

но чо-то не работает.



кстати КЭП, почему в браузерах табуляция не работает?


Re: Оптимизация кода - Johnny_Xayc - 16.08.2010

выводи в секундный таймер твой код,будет флудить 1 раз в секунду