Написание плагинов
#1

Многие пишут, что через плагин всё быстрее работает (с условием если грамотно и со смыслом их писать).
Решил попробывать написать свой 1-ый плагин, в котором пока что есть 1 функция UpperToLower, она переводит строку в нижний регистр.
Результат тестирования скорости поражает.

код C++:
PHP Code:
// native UpperToLower(string[]);
static cell AMX_NATIVE_CALL UpperToLower(AMX *amxcell *params)
{
    
char *string;
    
int len 0;
    
amx_StrParam(amxparams[1], string);
    if (
string != NULL)
    {
        
len strlen(string);
        for (
int i 0leni++)
        {
            switch (
string[i])
            {
                case 
'A'string[i] = 'a'; break;
                case 
'B'string[i] = 'b'; break;
                case 
'C'string[i] = 'c'; break;
                case 
'D'string[i] = 'd'; break;
                case 
'E'string[i] = 'e'; break;
                case 
'F'string[i] = 'f'; break;
                case 
'G'string[i] = 'g'; break;
                case 
'H'string[i] = 'h'; break;
                case 
'I'string[i] = 'i'; break;
                case 
'J'string[i] = 'j'; break;
                case 
'K'string[i] = 'k'; break;
                case 
'L'string[i] = 'l'; break;
                case 
'M'string[i] = 'm'; break;
                case 
'N'string[i] = 'n'; break;
                case 
'O'string[i] = 'o'; break;
                case 
'P'string[i] = 'p'; break;
                case 
'Q'string[i] = 'q'; break;
                case 
'R'string[i] = 'r'; break;
                case 
'S'string[i] = 's'; break;
                case 
'T'string[i] = 't'; break;
                case 
'U'string[i] = 'u'; break;
                case 
'V'string[i] = 'v'; break;
                case 
'W'string[i] = 'w'; break;
                case 
'X'string[i] = 'x'; break;
                case 
'Y'string[i] = 'y'; break;
                case 
'Z'string[i] = 'z'; break;
                case 
'А'string[i] = 'а'; break;
                case 
'Б'string[i] = 'б'; break;
                case 
'В'string[i] = 'в'; break;
                case 
'Г'string[i] = 'г'; break;
                case 
'Д'string[i] = 'д'; break;
                case 
'Е'string[i] = 'е'; break;
                case 
'Ё'string[i] = 'ё'; break;
                case 
'Ж'string[i] = 'ж'; break;
                case 
'З'string[i] = 'з'; break;
                case 
'И'string[i] = 'и'; break;
                case 
'Й'string[i] = 'й'; break;
                case 
'К'string[i] = 'к'; break;
                case 
'Л'string[i] = 'л'; break;
                case 
'М'string[i] = 'м'; break;
                case 
'Н'string[i] = 'н'; break;
                case 
'О'string[i] = 'о'; break;
                case 
'П'string[i] = 'п'; break;
                case 
'Р'string[i] = 'р'; break;
                case 
'С'string[i] = 'с'; break;
                case 
'Т'string[i] = 'т'; break;
                case 
'У'string[i] = 'у'; break;
                case 
'Ф'string[i] = 'ф'; break;
                case 
'Х'string[i] = 'х'; break;
                case 
'Ц'string[i] = 'ц'; break;
                case 
'Ч'string[i] = 'ч'; break;
                case 
'Ш'string[i] = 'ш'; break;
                case 
'Щ'string[i] = 'щ'; break;
                case 
'Ъ'string[i] = 'ъ'; break;
                case 
'Ы'string[i] = 'ы'; break;
                case 
'Ь'string[i] = 'ь'; break;
                case 
'Э'string[i] = 'э'; break;
                case 
'Ю'string[i] = 'ю'; break;
                case 
'Я'string[i] = 'я'; break;
            }
        }
        
string[len] = '\0';
    }
    else
    {
        
string "";
    }
    
cell *addr NULL;
    
amx_GetAddr(amxparams[1], &addr);
    
amx_SetString(addrstring00len+1);
    return 
1;

код Pawn:
PHP Code:
UpperToLower(string[])
{
    new 
len strlen(string);
    for (new 
ileni++)
    {
        switch (
string[i])
        {
            case 
'A'string[i] = 'a';
            case 
'B'string[i] = 'b';
            case 
'C'string[i] = 'c';
            case 
'D'string[i] = 'd';
            case 
'E'string[i] = 'e';
            case 
'F'string[i] = 'f';
            case 
'G'string[i] = 'g';
            case 
'H'string[i] = 'h';
            case 
'I'string[i] = 'i';
            case 
'J'string[i] = 'j';
            case 
'K'string[i] = 'k';
            case 
'L'string[i] = 'l';
            case 
'M'string[i] = 'm';
            case 
'N'string[i] = 'n';
            case 
'O'string[i] = 'o';
            case 
'P'string[i] = 'p';
            case 
'Q'string[i] = 'q';
            case 
'R'string[i] = 'r';
            case 
'S'string[i] = 's';
            case 
'T'string[i] = 't';
            case 
'U'string[i] = 'u';
            case 
'V'string[i] = 'v';
            case 
'W'string[i] = 'w';
            case 
'X'string[i] = 'x';
            case 
'Y'string[i] = 'y';
            case 
'Z'string[i] = 'z';
            case 
'А'string[i] = 'а';
            case 
'Б'string[i] = 'б';
            case 
'В'string[i] = 'в';
            case 
'Г'string[i] = 'г';
            case 
'Д'string[i] = 'д';
            case 
'Е'string[i] = 'е';
            case 
'Ё'string[i] = 'ё';
            case 
'Ж'string[i] = 'ж';
            case 
'З'string[i] = 'з';
            case 
'И'string[i] = 'и';
            case 
'Й'string[i] = 'й';
            case 
'К'string[i] = 'к';
            case 
'Л'string[i] = 'л';
            case 
'М'string[i] = 'м';
            case 
'Н'string[i] = 'н';
            case 
'О'string[i] = 'о';
            case 
'П'string[i] = 'п';
            case 
'Р'string[i] = 'р';
            case 
'С'string[i] = 'с';
            case 
'Т'string[i] = 'т';
            case 
'У'string[i] = 'у';
            case 
'Ф'string[i] = 'ф';
            case 
'Х'string[i] = 'х';
            case 
'Ц'string[i] = 'ц';
            case 
'Ч'string[i] = 'ч';
            case 
'Ш'string[i] = 'ш';
            case 
'Щ'string[i] = 'щ';
            case 
'Ъ'string[i] = 'ъ';
            case 
'Ы'string[i] = 'ы';
            case 
'Ь'string[i] = 'ь';
            case 
'Э'string[i] = 'э';
            case 
'Ю'string[i] = 'ю';
            case 
'Я'string[i] = 'я';
        }
    }

код для теста:
PHP Code:
public OnGameModeInit()
{
    new 
time GetTickCount();
    for (new 
i1000000i++)
    {
        
UpperToLower("текст");
    }
    
printf("результат: %d ms"GetTickCount() - time);
    return 
1;

Результат тестирования UpperToLower:

без jit:
C++ | короткая строка = 172, длинная строка = 1047
Pawn | короткая строка = 1978, длинная строка = 8934

с jit:
C++ | короткая строка = 162, длинная строка = 1028
Pawn | короткая строка = 264, длинная строка = 1672

строки, которые использовались при тесте:
pawn Code:
20 символов - иЛBё[еЬMDХ+T9wX/p1%Жs
100 символов - Юc№,Q)CxТФLrнПкХBjф[oiCЧм<bhшЗ,ыWR]ЁxчM}*Д8аCbР+bэjЭ1№D=оnнM!чepWo%GTKЧyR6VTЙSАщэЭSemюjFOЩ]ЭьтЛНЖ.ЧHLЛ
Процессор, на котором происходило тестирование: Intel Core i3 530 @ 2.93GHz

Скачать сборку для тестов v0.0.3 (мод + исходники)

Почему через плагин функции работают быстрее? Каковы преимущества?
Reply


Messages In This Thread
Написание плагинов - by Diman777 - 13.02.2017, 01:51
Re: Написание плагинов - by White_116 - 13.02.2017, 08:29
Re: Написание плагинов - by DartfoL - 13.02.2017, 09:09
Re: Написание плагинов - by OstGot - 13.02.2017, 09:36
Re: Написание плагинов - by DartfoL - 13.02.2017, 10:21
Re: Написание плагинов - by Mutha_X - 13.02.2017, 10:31
Re: Написание плагинов - by Diman777 - 13.02.2017, 13:45
Re: Написание плагинов - by Mutha_X - 13.02.2017, 15:37
Re: Написание плагинов - by White_116 - 13.02.2017, 15:47
Re: Написание плагинов - by Mutha_X - 13.02.2017, 16:53
Re: Написание плагинов - by Diman777 - 13.02.2017, 16:59
Re: Написание плагинов - by White_116 - 13.02.2017, 18:24
Re: Написание плагинов - by Diman777 - 13.02.2017, 19:00
Re: Написание плагинов - by DartfoL - 13.02.2017, 19:14
Re: Написание плагинов - by ZiGGi - 13.02.2017, 19:21
Re: Написание плагинов - by DartfoL - 13.02.2017, 19:27
Re: Написание плагинов - by Diman777 - 13.02.2017, 19:37
Re: Написание плагинов - by ZiGGi - 13.02.2017, 20:13
Re: Написание плагинов - by Mutha_X - 13.02.2017, 20:36
Re: Написание плагинов - by stabker - 13.02.2017, 20:39
Re: Написание плагинов - by Diman777 - 13.02.2017, 21:04
Re: Написание плагинов - by ZiGGi - 13.02.2017, 21:14
Re: Написание плагинов - by Diman777 - 13.02.2017, 21:33
Re: Написание плагинов - by joker2020pro - 14.02.2017, 05:17
Re: Написание плагинов - by White_116 - 14.02.2017, 08:19
Re: Написание плагинов - by Diman777 - 14.02.2017, 12:47
Re: Написание плагинов - by Mutha_X - 14.02.2017, 17:05
Re: Написание плагинов - by White_116 - 14.02.2017, 17:24
Re: Написание плагинов - by ZiGGi - 14.02.2017, 19:59
Re: Написание плагинов - by Diman777 - 14.02.2017, 20:48
Re: Написание плагинов - by Mutha_X - 14.02.2017, 22:00
Re: Написание плагинов - by Stepashka - 15.02.2017, 06:03
Re: Написание плагинов - by MIASO - 15.02.2017, 21:39
Re: Написание плагинов - by Diman777 - 15.02.2017, 22:30
Re: Написание плагинов - by MIASO - 16.02.2017, 12:59
Re: Написание плагинов - by Diman777 - 16.02.2017, 18:37
Re: Написание плагинов - by Bombo - 16.02.2017, 18:55
Re: Написание плагинов - by Diman777 - 16.02.2017, 19:12
Re: Написание плагинов - by DartfoL - 17.02.2017, 19:20
Re: Написание плагинов - by Diman777 - 17.02.2017, 20:24
Re: Написание плагинов - by DartfoL - 18.02.2017, 08:26
Re: Написание плагинов - by MIASO - 19.02.2017, 14:22
Re: Написание плагинов - by DartfoL - 19.02.2017, 16:11
Re: Написание плагинов - by Diman777 - 20.02.2017, 02:12
Re: Написание плагинов - by Stepashka - 20.02.2017, 05:05
Re: Написание плагинов - by MIASO - 20.02.2017, 10:13
Re: Написание плагинов - by DartfoL - 20.02.2017, 11:26
Re: Написание плагинов - by White_116 - 20.02.2017, 18:30
Re: Написание плагинов - by Diman777 - 20.02.2017, 19:49
Re: Написание плагинов - by White_116 - 20.02.2017, 19:59
Re: Написание плагинов - by OKStyle - 21.02.2017, 03:17
Re: Написание плагинов - by White_116 - 21.02.2017, 04:35
Re: Написание плагинов - by MIASO - 21.02.2017, 12:31
Re: Написание плагинов - by Stepashka - 21.02.2017, 12:40
Re: Написание плагинов - by Kolstin - 21.02.2017, 13:55
Re: Написание плагинов - by White_116 - 21.02.2017, 15:23
Re: Написание плагинов - by MIASO - 21.02.2017, 18:00
Re: Написание плагинов - by White_116 - 21.02.2017, 18:13
Re: Написание плагинов - by Gettopro - 21.02.2017, 18:24
Re: Написание плагинов - by DartfoL - 21.02.2017, 19:52
Re: Написание плагинов - by Diman777 - 21.02.2017, 20:05
Re: Написание плагинов - by NarutoUA - 21.02.2017, 20:13
Re: Написание плагинов - by Diman777 - 21.02.2017, 20:29
Re: Написание плагинов - by DartfoL - 21.02.2017, 20:31
Re: Написание плагинов - by NarutoUA - 21.02.2017, 20:46
Re: Написание плагинов - by Diman777 - 21.02.2017, 22:03
Re: Написание плагинов - by MIASO - 21.02.2017, 22:11
Re: Написание плагинов - by Diman777 - 21.02.2017, 22:46
Re: Написание плагинов - by MIASO - 21.02.2017, 23:41
Re: Написание плагинов - by DartfoL - 22.02.2017, 10:42
Re: Написание плагинов - by Mutha_X - 23.02.2017, 21:24
Re: Написание плагинов - by MIASO - 23.02.2017, 21:35
Re: Написание плагинов - by Mutha_X - 23.02.2017, 21:58
Re: Написание плагинов - by DartfoL - 24.02.2017, 07:32
Re: Написание плагинов - by Mutha_X - 24.02.2017, 07:48
Re: Написание плагинов - by ZiGGi - 24.02.2017, 07:49
Re: Написание плагинов - by Mutha_X - 24.02.2017, 08:13
Re: Написание плагинов - by Mutha_X - 24.02.2017, 08:15
Re: Написание плагинов - by ZiGGi - 24.02.2017, 08:30
Re: Написание плагинов - by ZiGGi - 24.02.2017, 08:58
Re: Написание плагинов - by DartfoL - 24.02.2017, 09:12
Re: Написание плагинов - by Diman777 - 17.03.2017, 00:17
Re: Написание плагинов - by joker2020pro - 17.03.2017, 07:56
Re: Написание плагинов - by Diman777 - 17.03.2017, 18:33

Forum Jump:


Users browsing this thread: 24 Guest(s)