Как можно замерить время выполнения команд нестандартным способом
#1

Есть варианты как можно замерить скорость выполнение команды, при этом узнать, что это за команда (profiler не подойдет, он показывает только время)?

Мне нужно отловить самую проблемную команду, которая тормозит сервер. Алгоритм должен быть такой: если время выполнения какой-либо команды более, к примеру, 50 млсек, то записываем информацию в лог.

Например так:

Команда: /teleport | Время выполнения: 53 млсек

Обычный способ замерить время начала выполнения и время завершения в OnPlayerCommandText мне не подходит. Команд слишком много, и все они после своего выполнения завершают OnPlayerCommandText (возвращают 1), то есть в конце коллбека принтить время не получится. К слову OnPlayerCommandText в 12 тысяч строк, по этому хочу найти альтернативное решение.

Думал что-нибудь намудрить с помощью CallLocalFunction, но ничего вменяемо придумать не удалось.
Reply
#2

Переименовать свой OnPlayerCommandText, создать другой, вызвать переименованный из созданного, поставить пару принтов и вуаля.
Reply
#3

Quote:
Originally Posted by eakwarp
View Post
Переименовать свой OnPlayerCommandText, создать другой, вызвать переименованный из созданного, поставить пару принтов и вуаля.
Вот я тормоз. Спасибо
Reply
#4

Quote:
Originally Posted by eakwarp
View Post
Переименовать свой OnPlayerCommandText, создать другой, вызвать переименованный из созданного, поставить пару принтов и вуаля.
можно, пожалуйста, по-подробнее?
Reply
#5

Quote:
Originally Posted by CamperGTA
View Post
можно, пожалуйста, по-подробнее?
pawn Code:
//Куда-нибудь в самое начало

public OnPlayerCommandText(playerid, cmdtext[])
{
    new gtc = GetTickCount();
    #if defined my_OnPlayerCommandText
        my_OnPlayerCommandText(playerid, cmdtext);
    #else
        print("Что-то не так.");
        return 0;
    #endif
    printf("OnPlayerCommandText выполнился. Команда: %s. Время: %d", cmdtext, GetTickCount() - gtc);
    return 1; //или 0..
}

//ALS Hook Method 7
#if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
#else
    #define _ALS_OnPlayerCommandText
#endif
#define OnPlayerCommandText my_OnPlayerCommandText
#if defined my_OnPlayerCommandText
    forward my_OnPlayerCommandText(playerid, cmdtext[]);
#endif

//Ваш OnPlayerCommandText с командами
public OnPlayerCommandText(playerid, cmdtext[])
{
    //Ваши команды
    return 0;
}
Пишу в браузере и проверить нет возможности, поэтому за любые ошибки в коде извиняйте. Думаю суть ясна.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)