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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

---

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

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

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++;
}
Reply
#94

Можно так сделать:
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++;
}
Reply
#95

Вот занялся конкретной оптимизацией своего мода,но столкнулся с замутками,как будет лучше и быстрее работать?..так:
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) - это макрос цикла,думаю сразу понятно)))...
Reply
#96

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

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

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

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);

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

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

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 раз в секунду.

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



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

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


Forum Jump:


Users browsing this thread: 5 Guest(s)