[TuT] Optimizacija koda

Započeo LordShigi, Avgust 01, 2010, 10:52:45 PRE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

DUŽINA STRINGOVA

Uvod
Većina PAWN skriptera je nekako zaključila da dužina svakog stringa mora biti 256. Isto tako su zaključili da je najveći mogući string veličine 256. Za to su najverovatnije kriv GodFather koji je skoro najviše korišteni gamemod u SA:MPu. U GodFatheru su SVI stringovi 256. I kada pocetnik skripter promatra skriptu vjerovatno je to svjesno ili nesvjesno uočio i sad to koristi

Objašnjenje stringa

String u PAWNu je zapravo array slova. On je null terminated odnosno završava s \0 (ASCII kod: 0)


new
string[8] = "Pozdrav";

Taj string je zapravo dug 8 čelija zbog toga jer je duljina teksta 7 čelija te još jednu čeliju zauzima /0.

To se može napisati i ovako

new
string[8] = {'P','o','z', 'd','r', 'a','v','\0'};


Ili:

new
string[8] = {80, 111, 122, 100, 114, 97, 118, 0};

Znači 80,111,122,100,114,97 i 118 su slova a 0 je null terminator koji završava string.

Kada vi napravite ovo:

new
string[256];

Vi zapravo svaki cell od njih 256 stavljate na 0 Å¡to traje

Zašto ne koristiti 256?

  • Sporo je:
Sporo je zbog toga jer vi stavljate 256 cellova na 0 Å¡to traje.

  • Netreba vam:
Predpostavimo da je vaÅ¡ najveći admin level 9999. I Å¡to se onda dogaÄ'a. Recimo da želite formatirati string da ispiÅ¡e vaÅ¡ admin level:
format(string,sizeof(string),"Moj admin level je %i", adminlvl);
I sad imamo 20čelija teksta + MAXIMALNO 4čelija koje nam trebaju za adminlvl + 1čelija za null(/0)
Znači da nam treba MAKSIMALNO 25 čelija. Ako vi stavite 256 onda zauzmete 924bajta u serverskoj memoriji koji vam za ništa ne služe (to je skoro kilobajt !!!)

  • Maksimalni input u SA:MPu je 128
S obzirom da je najveći mogući input u SA:MPu 128 slova, zašto koristiti duplo veći string da bi ga spremili?

  • Maksimalni output u SA:MPu je 128
Ako radite komandu tipa /ooc, nemojte koristiti 256 zbog toga jer je najveći mogući output 128 pa bi onda bezveze napravili 512bajta u serverskoj memoriji ako ih nikad nećemo koristiti.

  • Netreba vam (2)

public OnPlayerCommandText(playerid, cmdtext[])
{
new
string[256],
cmd[256];
cmd = strtok(cmdtext, idx);
if (strcmp(cmd, "/broj", true) == 0)
{
format(string, sizeof (string), "Nasumicni broj: %d", random(27));
SendClientMessage(playerid, 0xFF0000AA, string);
}
}

Ovdje je puno stvari loše napravljeno. Za početak koristi se strtok i loš procesor komandi. Ali to ću obraditi sljedeći put.


new
string[256],
cmd[256];

Zašto dvije, kada već server zna koja komanda je stisnuta zašto ponovo ne iskoristiti isti string kada vam više netreba. Samo povecavate duljinu i količinu podataka na serveru.


new
string[256];

Zašto 256 kad je najveći input/output SA:MPa 128.

Bolja verzija bi bila

public OnPlayerCommandText(playerid, cmdtext[])
{
new
string[128]; // cmdtext nikad neće biti veći od 128
string = strtok(cmdtext, idx);
if (strcmp(string, "/broj", true) == 0)
{
format(string, sizeof (string), "Nasumicni broj: %d", random(27));
SendClientMessage(playerid, 0xFF0000AA, string);
}
}


Kada da koristim 256?
Kada je potrebno, ponekad su veliki stringovi i više nego potrebni. Najčešće u SQL queryima i čitanju podataka, ali i onda vrijedi sve ovo gore.

  • SQL
SQL querysi mogu biti jako dugi, ali opet vrijedi sve ovo gore. nemojte stavljati 256, 512 ili 1024 čim vidite query.

  • ÄŒitanje fajlova
U slučaju kad neznate koliko će biti velik fajl koji čitate se može koristiti 256 samo da pokrijete sve mogučnosti.

CREDITS: LordShigi - Pisanje Tutoriala
Y-Less pisanje tutoriala na engleskom s kojeg su preuzeti mnogi sadržaji.

Poslednja Izmena: April 17, 2012, 14:53:33 POSLE PODNE od joXy_


RESPECT 4 EVER: John, GLC,bAndzi, Nikola, Sop, Zoki, Bruno_Venuti, Mele, Luka P,ExtremePower,Wang(neki kineski frajer)

NAJBOLJI CITATI:
Citat: [GF]Alive poslato Jun 24, 2010, 18:20:19 POSLE PODNE
Paizte ljud mozda je KayLoger! ! !
MOJI RADOVI:
[FS]Trofeji

odlicno. brate. sam nist jos ne kontam. xD

Odlicno si to napravio! Vidio sam to na SA:MP forumu od Y-Lessa, ali sad je ovo super sto je sad i na Balkan SA:MP-u ;)

Last nick: Paradox

Lijepo i korisno...Pomoci ce mogima ;)
Mysterious roleplay

hehe čelije,to si uzeo za nekog translatora,ja to zovem polja.

[NUDIM ]
Gang-Rush server TDM besplatno


Ne, nego preveo kako treba. To ti se tako prevodi u hrvatskom.


RESPECT 4 EVER: John, GLC,bAndzi, Nikola, Sop, Zoki, Bruno_Venuti, Mele, Luka P,ExtremePower,Wang(neki kineski frajer)

NAJBOLJI CITATI:
Citat: [GF]Alive poslato Jun 24, 2010, 18:20:19 POSLE PODNE
Paizte ljud mozda je KayLoger! ! !
MOJI RADOVI:
[FS]Trofeji