Balkan SA:MP

San Andreas Multiplayer - www.sa-mp.com => Tutorijali u vezi SA-MPa => Temu započeo: LordShigi poslato Avgust 01, 2010, 10:52:45 PRE PODNE

Naslov: [TuT] Optimizacija koda
Poruka od: LordShigi poslato Avgust 01, 2010, 10:52:45 PRE PODNE
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.
Naslov: Odg: [TUTORIAL] Optimizacija koda
Poruka od: marac poslato Avgust 01, 2010, 11:26:38 PRE PODNE
odlicno. brate. sam nist jos ne kontam. xD
Naslov: Odg: [TUTORIAL] Optimizacija koda
Poruka od: Joey_ poslato Avgust 01, 2010, 14:17:34 POSLE PODNE
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 ;)
Naslov: Odg: [TUTORIAL] Optimizacija koda
Poruka od: SlicK poslato Avgust 01, 2010, 15:25:37 POSLE PODNE
Lijepo i korisno...Pomoci ce mogima ;)
Naslov: Odg: [TUTORIAL] Optimizacija koda
Poruka od: קlเשค poslato Avgust 01, 2010, 15:50:07 POSLE PODNE
hehe čelije,to si uzeo za nekog translatora,ja to zovem polja.
Naslov: Odg: [TUTORIAL] Optimizacija koda
Poruka od: LordShigi poslato Avgust 01, 2010, 16:06:43 POSLE PODNE
Ne, nego preveo kako treba. To ti se tako prevodi u hrvatskom.