[Tutorial] Pequenas Otimizaзхes
#1

Introduзгo:

Oi galera hoje vou postar alguns cуdigos relacionados a testes de velocidade.

Sгo cуdigos para vocк mesmo usar em seu pc e decidir qual й melhor ou pior.

Nгo й bem um Tutorial,atй porque nгo explico nada,apenas й 'Dicas' de pequenas otimizaзхes que vocк pode fazer.

Nota:
Espaзos nгo Otimizam Nada
return Funcao(playerid) em um comando tambйm nгo otimiza nada
! e == 0 e == false sгo a mesma coisa

Cуdigos:

Vou colocar o mбximo de cуdigos possнvel,execute-o em seu pc e veja qual й o melhor


While x For Loop

pawn Code:
#include <a_samp>


#define maxloop     (10000000)   //loops para teste

public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount(),array,i;

    while (i < maxloop)
    {
        i++;
        array++;
    }

    printf("[While] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount(),arrei,a;
       
    for(a = 0; a < maxloop; a++)
    {
        arrei++;
    }
    printf("[For] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));

    //==========================================================================
    return true;
}
RESULTADO: For Mais rбpido

Code:
[13:21:56] [While] Functions: 10000000 - Temp: 486
[13:21:57] [For] Functions: 10000000 - Temp: 388
Static x New

pawn Code:
#include <a_samp>


#define maxloop     (1000000)   //loops para teste

public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount();

    for(new i; i < maxloop; ++i)
    {
        static array;
    }

    printf("[Static] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount();
    for(new i; i < maxloop; ++i)
    {
        new array;
    }
    printf("[New] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));

    //==========================================================================
    return true;
}
RESULTADO: Static mais rбpido

Code:
[13:23:07] [Static] Functions: 1000000 - Temp: 24
[13:23:07] [New] Functions: 1000000 - Temp: 43
Max_Players x GetMaxPlayers
pawn Code:
#include <a_samp>


#define maxloop     (100000)   //loops para teste

public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount();

    for(new i; i < maxloop; ++i)
    {
        for(new p; p < MAX_PLAYERS; p++)
        {
        }
    }

    printf("[MaxPlayers] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount();
    for(new i; i < maxloop; ++i)
    {
        for(new p; p < GetMaxPlayers(); p++)
        {
        }
    }
    printf("[GetMaxPlayer] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));

    //==========================================================================
    return true;
}
RESULTADO: Max_Players mais rбpido,claro

Code:
[13:26:21] [MaxPlayers] Functions: 100000 - Temp: 1064
[13:26:23] [GetMaxPlayer] Functions: 100000 - Temp: 2255
Defines x Stocks

pawn Code:
stock GetSAMP() return 10;
#define GetSAMP2 10

#include <a_samp>


#define maxloop     (100000)   //loops para teste

public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount();

    for(new i; i < maxloop; ++i)
    {
        printf("Is %d",GetSAMP2);
    }

    printf("[Defines] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount();
    for(new i; i < maxloop; ++i)
    {
        printf("Is %d",GetSAMP());
    }
    printf("[Stocks] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));

    //==========================================================================
    return true;
}
RESULTADO: Defines,sempre que possнvel use-as

Code:
[13:30:04] [Defines] Functions: 100000 - Temp: 8534
[13:30:55] [Stocks] Functions: 100000 - Temp: 10971
I++ x ++I

pawn Code:
#include <a_samp>


#define maxloop     (100000000)   //loops para teste

public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount();

    for(new i; i < maxloop; ++i)
    {
    }

    printf("[++i] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount();
    for(new i; i < maxloop; i++)
    {
    }
    printf("[i++] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));

    //==========================================================================
    return true;
}
RESULTADO: ++i й pouco mais otimizado

Code:
[13:33:24] [++i] Functions: 100000000 - Temp: 2129
[13:33:26] [i++] Functions: 100000000 - Temp: 2147
Strlen x Eos

pawn Code:
#include <a_samp>


#define maxloop     (100000000)   //loops para teste

static string[64] = "Oi isto й um teste haha";
public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount();

    for(new i; i < maxloop; ++i)
    {
        if(string[10] != '\0')
        {
        }
    }

    printf("[Eos] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount();
    for(new i; i < maxloop; i++)
    {
        if(strlen(string) > 10)
        {
        }
    }
    printf("[Strlen] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));

    //==========================================================================
    return true;
}
RESULTADO: Usando End Of String com Condicional й muito mais rбpido
Code:
[13:46:14] [Eos] Functions: 100000000 - Temp: 4084
[13:46:23] [Strlen] Functions: 100000000 - Temp: 9799
Strins x Format

pawn Code:
#include <a_samp>


#define maxloop     (100000)   //loops para teste

static stringformat[64] = "Oi isto й um teste haha";
static stringstrins[64] = "Oi isto й um teste haha";
public OnFilterScriptInit()
{
    //==========================================================================

    new
        dCount = GetTickCount();

    for(new i; i < maxloop; ++i)
    {
        format(stringformat,64,"%s,oi",stringformat);
    }

    printf("[Format] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));

    //==========================================================================

    new
        bCount = GetTickCount();
    for(new i; i < maxloop; i++)
    {
        strins(stringstrins,",oi",strlen(stringstrins),sizeof stringstrins);
    }
    printf("[Strins] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));
    //==========================================================================
    printf(stringstrins);
    printf(stringformat);
    return true;
}

RESULTADO: Usando Strins й bem mais otimizado,sempre use quando puder

Code:
[13:44:24] [Format] Functions: 100000 - Temp: 61
[13:44:24] [Strins] Functions: 100000 - Temp: 28
Como podem ver otimizaзгo em pawn existe,apesar de pawn nгo ser nada otimizado.
Porйm sempre tente fazer seu melhor,por que pawn jб й uma merda,agora se deixar mais merda ainda fode tudo.

Atй semana que vem,vou sair por um tempo,vгo postando seus testes e dicas para testes.

Atй mais.

Valeu
Reply
#2

Valeuzгo, muito bom esse tutorial, vai me ajudar bastante.
Sу uma perguntam, como se usa Strins e EOS ?
Nгo tenho a minima idйia, preciso otimizar o meu gamemode.. estб com muitas linhas e fazendo o host travar.

Ty
Reply
#3

Bom tuto dragaozinho..
Reply
#4

KKKKKKKKKKKKKKKKKKKKKKKK
Code:
pawn jб й uma merda,agora se deixar mais merda ainda fode tudo.
Reply
#5

Quote:
Originally Posted by [Full]Garfield[XDB]
View Post
KKKKKKKKKKKKKKKKKKKKKKKK
Code:
pawn jб й uma merda,agora se deixar mais merda ainda fode tudo.
euriІ
Reply
#6

Ricop
Strins insere um string em uma String
e Eos й tipo para checar se й o final da string

pawn Code:
if(string[10] != EOS)
{
   print("й maior");
}
Checa se a string tem o lenght maior que 10,caso for maior ele da print

Enquanto strins,busca na Wiki
Reply
#7

HeHeHe Agora com essas dicas vou otimizar meu Gm aproveitando qeu ele esta com poucas linhas hehehe um dia antes de ficar adulto quero termina-lo shaushuahsu
Reply
#8

Obrigado DraKiNs :]
Reply
#9

Impressionante o trabalho mais uma vez! Uma pergunta: Quando vocк usar 'strins? Й como (....), formato e, em seguida, vocк pode usar 'SendClientMessage?

Alйm disso, eu apreciaria isto se vocк manter a sua actualizaзгo! Obrigado novamente!
Reply
#10

Quote:
Originally Posted by [L3th4l]
View Post
Impressionante o trabalho mais uma vez! Uma pergunta: Quando vocк usar 'strins? Й como (....), formato e, em seguida, vocк pode usar 'SendClientMessage?

Alйm disso, eu apreciaria isto se vocк manter a sua actualizaзгo! Obrigado novamente!
Vocк tem que pensar mais tйcnicamente, vocк nгo vai usar strins pra em seguida usar SendClientMessage, vocк vai usar strins pra inserir caracteres dentro de uma string e assim poder usa-la em SendClientMessage.
Parece inъtil, mas mudando sua forma de pensar vocк colocar seu objetivo no arquivo sem precisar da ajuda de ninguйm.

A funзгo do strins й inserir caracteres dentro de uma string a partir de certa posiзгo atй certa posiзao dentro mбximo de caracteres que vocк quiser:

pawn Code:
strins(/*string que vai receber*/, /*caracteres a serem copiados*/, /*de onde comeзar*/, /*mбximo de caracteres a serem copiados*/);
Um caso simples do uso de format onde se pode usar strins:
pawn Code:
new Str[128], Nome[24];
GetPlayerName(playerid, Nome, 24);
format(Str, sizeof Str, "%s foi а favela. (/favela)" Nome);
Com strins:
pawn Code:
new Str[128], Nome[24];
Str = " foi а favela. (/favela)";
GetPlayerName(playerid, Nome, 24);
strins(Str, Nome, 0, 24);
Em ambos os casos vocк pode enviar a mensagem contendo Str.

Parвmetros:

1є Str: string que recebeu os caracteres da string Nome, ou a string Nome, entenda como preferir.
2є Nome: string contendo os caracteres a serem colocados em Str, poderia ser "Joao", por exemplo.
3є 0: posiзгo de onde comeзar a inserir
4є O ъltimo parвmetro por padrгo й o tamanho da primeira string, nesse caso foi usado o tamanho mбximo que um nick pode ter, se quiser nгo precisa colocar nada(se nгo tivesse nada seria 128 ), nгo faz diferenзa se tratando de velocidade.
Reply
#11

Quote:
Originally Posted by cynic
View Post
Vocк tem que pensar mais tйcnicamente, vocк nгo vai usar strins pra em seguida usar SendClientMessage, vocк vai usar strins pra inserir caracteres dentro de uma string e assim poder usa-la em SendClientMessage.
Parece inъtil, mas mudando sua forma de pensar vocк colocar seu objetivo no arquivo sem precisar da ajuda de ninguйm.

A funзгo do strins й inserir caracteres dentro de uma string a partir de certa posiзгo atй certa posiзao dentro mбximo de caracteres que vocк quiser:

pawn Code:
strins(/*string que vai receber*/, /*caracteres a serem copiados*/, /*de onde comeзar*/, /*mбximo de caracteres a serem copiados*/);
Um caso simples do uso de format onde se pode usar strins:
pawn Code:
new Str[128], Nome[24];
GetPlayerName(playerid, Nome, 24);
format(Str, sizeof Str, "%s foi а favela. (/favela)" Nome);
Com strins:
pawn Code:
new Str[128], Nome[24];
Str = " foi а favela. (/favela)";
GetPlayerName(playerid, Nome, 24);
strins(Str, Nome, 0, 24);
Em ambos os casos vocк pode enviar a mensagem contendo Str.

Parвmetros:

1є Str: string que recebeu os caracteres da string Nome, ou a string Nome, entenda como preferir.
2є Nome: string contendo os caracteres a serem colocados em Str, poderia ser "Joao", por exemplo.
3є 0: posiзгo de onde comeзar a inserir
4є O ъltimo parвmetro por padrгo й o tamanho da primeira string, nesse caso foi usado o tamanho mбximo que um nick pode ter, se quiser nгo precisa colocar nada(se nгo tivesse nada seria 128 ), nгo faz diferenзa se tratando de velocidade.
Muito obrigado!
Reply
#12

bom tutorial, uma nota curta sobre strlen contra porque se vocк usar, nгo use strlen como no post, use-o assim:

pawn Code:
for (new pos, len = strlen(string); pos < len; pos ++)
{
}
nice tutorial
Reply
#13

Era bom eles trocarem de pawn pra brain fuck !
Reply
#14

muito foda esse tutorial '-', mas uma duvida? muito warnings dao lag no serve e na compilaзao? pois meu gm se tinver 20warning e pouco '-'
Reply
#15

Esse teste que eu fiz estб certo ?

Code:
       #define maxloop     (100000)   //loops para teste
       new Velocidade[MAX_PLAYERS];

	//==========================================================================
	if (strcmp(cmdtext, "/Velocidade", true)==0)
	{
 		new dCount = GetTickCount();
 		for(new i; i < maxloop; ++i)
 		{
			if(GetPVarInt(playerid,"Velocidade") == 1)
			{
			}
		}
	 	printf("[PVar] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));
	//--------------------------------------------------------------------------
   		new bCount = GetTickCount();
   		for(new i; i < maxloop; ++i)
   		{
   			if(Velocidade[playerid] == 1)
   			{
   			}
		}
   		printf("[MaxPlayers] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));
		return 1;
	}

    [01:54:00] [PVar] Functions: 100000 - Temp: 28
    [01:54:00] [MaxPlayers] Functions: 100000 - Temp: 12
    //==========================================================================
Nгo usei um filterscript porque nгo da para colocar playerid no OnFilterScriptInit
Reply
#16

usa

pawn Code:
if(Velocidade[i] == 1)
            {
Tenзo


pawn Code:
#define maxloop     (100000)   //loops para teste
       new Velocidade[MAX_PLAYERS];

    //==========================================================================
    if (strcmp(cmdtext, "/Velocidade", true)==0)
    {
        new dCount = GetTickCount();
        for(new i; i < maxloop; ++i)
        {
            if(GetPVarInt(i,"Velocidade") == 1)
            {
            }
        }
        printf("[PVar] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - dCount));
    //--------------------------------------------------------------------------
        new bCount = GetTickCount();
        for(new i; i < maxloop; ++i)
        {
            if(Velocidade[i] == 1)
            {
            }
        }
        printf("[MaxPlayers] Functions: %d - Temp: %d",maxloop,(GetTickCount()  - bCount));
        return 1;
    }

    //==========================================================================
Reply
#17

Eu fiz todo o procedimento de otimizaзгo indicado em meu gamemode, e consegui ganhar incrнveis 0,00000000001ms de performance. Parabйns!

Espero ter ajudado.
Reply
#18

Quote:
Originally Posted by Coe1
View Post
Eu fiz todo o procedimento de otimizaзгo indicado em meu gamemode, e consegui ganhar incrнveis 0,00000000001ms de performance. Parabйns!

Espero ter ajudado.
Olha a data do tуpico.
Reply
#19

Quote:
Originally Posted by Coe1
View Post
Eu fiz todo o procedimento de otimizaзгo indicado em meu gamemode, e consegui ganhar incrнveis 0,00000000001ms de performance. Parabйns!

Espero ter ajudado.
Tambйm utilizei algumas dicas e senti grande diferenзa..
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)