Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Optimizacija ir kodo spartinimas.


Stuneris

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3976 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki, taigi daugelis serverių susiduria su problemomis, kaip lag, crash ir panašiai, neretai tai nutinka dėl serverio apkrovos, šioje pamokoje paminėsių keletą būdų kaip galėtumėte paspartinti serverio darbą ir sumažinti apkrovą.

 

1. if pakeitimas į switch ir case.

 

Šis būdas vienas iš labiausiai pagretinantis darbą ir sumažinantis apkrovą, kaip ir kur jį reikėtų naudoti, šiaip galima ir patartina naudoti visur kur yra daugiau if'ų. Aš paimsiu pavyzdį OnDialogResponse callback'o.

 

Su if'ais viskas atrodytų taip:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 0)
{
if(response) // Koks nors kodas...
else // Kitas kodas...
}
if(dialogid == 1)
{
if(response) // Koks nors kodas...
else // Kitas kodas...
}
if(dialogid == 2)
{
if(response) // Koks nors kodas...
else // Kitas kodas...
}
return 1;
}

Na, o greitesnis ir taupesnis jo variantas taip:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 0:
{
if(response) // Koks nors kodas...
else // Kitas kodas...
}
case 1:
{
if(response) // Koks nors kodas...
else // Kitas kodas...
}
case 2:
{
if(response) // Koks nors kodas...
else // Kitas kodas...
}
}
return 1;
}

2. string dydžių skaičiavimas.

 

Šis optimizacijos būdas kodą nelabai paspartins, bet rezursų naudojimą ir apkrovą sumažins tikrai.

 

Daleiskime turime tokį kintamąjį:

new string[128] = "Sveiki";

Kintamojo dydis nustatytas 128, bet tokio tikrai nereikia, nes juk žodis „Sveiki“ yra tik 6 simbolių ilgio. Taigi dydį sumažinkime iki tokio, kokio ilgio yra tekstas, bet pridėkimę vienetą, kad kintamajame neliktų „null“ reikšmė t.y. teksto ilgis + 1:

new string[7] = "Sveiki";

3. Komandų procesoriaus naudojimas.

 

Niekas taip nepaspartins komandų kaip komandų procesorius, aš jums rekomenduoju ZeeX Command include (ZCMD), ją galite parsisiųsti iš čia - http://www.solidfiles.com/d/879d1213462fc1562d16d464e90c8cf9/

 

4. Streamer naudojimas.

 

Šis dalykėlis paspartins objėktų krovimą ir padidins galimų objėktų naudojimo limitą. Aš rekomenduoju naudoti Incognito Streamer plugin, kurį rasite čia - http://code.google.com/p/samp-streamer-plugin/downloads/list

 

5. Maxplayer skaičiavimas pagal jūsų žaidėjų skaičių.

 

Tai paspartins darbą, nes kodui nebereikės tikrinti visų 500 žaidėjų, jei jų daleiskime serveryje gali būti tik 200. Kodo viršuje pridėkite tokias eilutes:

#undef MAX_PLAYERS
#define MAX_PLAYERS (Jūsų maxplayers iš server.cfg)

Na šioje pamokoje tiek, jei kyla klausimų, kreipkitės temoje.

Nuoroda į komentarą
Dalintis per kitą puslapį

1, Pamiršai paminėti kad negalima "switch'inti" kintamųjų, tik constant skaičius

2. Pilnai pritariu. Ypač tie kas naudoja GRP4.0 bus pripratę naudoti visur "256" masyvus, net jei diždiausia reikšmė kurią gali gauti yra 128 simboliai

3. Nėra ką pasakyti, nebent naudoti YCMD(by Y_Less) dėl papildomų funkcijų

4. Vargu ar paspartins. Jis tiesiog kraus objektus prie kurių arčiausiai esi... 

Reikia Pawn pagalbos? Skype nerašyk.

 

 

 

 

 

 

Nuoroda į komentarą
Dalintis per kitą puslapį

1, Pamiršai paminėti kad negalima "switch'inti" kintamųjų, tik constant skaičius

2. Pilnai pritariu. Ypač tie kas naudoja GRP4.0 bus pripratę naudoti visur "256" masyvus, net jei diždiausia reikšmė kurią gali gauti yra 128 simboliai

3. Nėra ką pasakyti, nebent naudoti YCMD(by Y_Less) dėl papildomų funkcijų

4. Vargu ar paspartins. Jis tiesiog kraus objektus prie kurių arčiausiai esi... 

1. Dėja, kintamuosius switch'inti galima. Daleiskime toks kodas:

for(new i=0; i<10; i++)
{
switch(i)
{
case 0: // Veiksmas...
case 1: // Veiksmas...
case 2: // Veiksmas...
...
}
}

2. Jei didesnės rezoliucijos telpa tikrai daugiau nei 128 simboliai, pvz mano rezoliucija 1440x900 tai nei puse ekrano nėra tas 128.

4. Būtent dėl to, kad krauna tik artimiausius objektus ir paspartina, nes reikia užkrauti mažesnį skaičių.

Nuoroda į komentarą
Dalintis per kitą puslapį

2. Ne. Rezoliucija nieko nereiškia,net ir su mažiausia input GUI galėtų "scrollinti" kiek reikia. Bet ji to nedaro. http://wiki.sa-mp.com/wiki/Limits

1. Ką norėjau pasakyti(pagalvojęs) ne tai kad "switchinti" neišeina,bet "case KINTAMASI:" nepavyksta(bent vienoje situacijoje).

Redaguota , nario Justas Š.

Reikia Pawn pagalbos? Skype nerašyk.

 

 

 

 

 

 

Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

Kalbant apie įvesty tai taip, įrašius 128 simbolius daugiau tiesiog nesirašo, dėl ekrano taip pat tavo tiesa, dabar pabandžiau, viskas pasikeitę, net ir įvedus ilgesnį tekstą kelia į naują eilutę, bet esu garantuotas, kad senesnėse versijose ne tik, kad nekeldavo į naują eilutę, bet ir buvo įmanoma kodu atspausdinti ekrane daugybe simbolių. Nuo rezoliucijos priklausydavo kiek tilps eilutėje simbolių.

 

P.S. Pratęskim skype, rasi mano profilyje.
 

Redaguota , nario Virtual Idea
Nuoroda į komentarą
Dalintis per kitą puslapį

 

Streameris lėčiau krauna objektus negu default samp CreateObject, kartais kai atsispawnini jų net nespėja parodyt bet per juos kiaurai pereit negali, kaip kad su streamintais objektais.

 

stream_rate 1000

 

Tu niekaip nepadarysi kad krautų greičiau negu samp default, galim lažintis. ;)

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 savaičių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3976 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...