Szerző Téma: Melyik a gyorsabb és takarékosabb megoldás Dinihez?  (Megtekintve 639 alkalommal)

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Melyik a gyorsabb és takarékosabb megoldás Dinihez?
« Dátum: 2014. augusztus 28. - 16:29:39 »
0 Show voters
Sziasztok :)
Mivel én lusta ember vagyok, ezért minél gyorsabban és takarékosabban akarok elvégezni mindent.
Szóval a kérdés az volna, hogy a hagyományos Dinis betöltõs módszer helyett, ami így néz ki:
 

        new neve[MAX_PLAYER_NAME], file[200];
        GetPlayerName(playerid, neve, sizeof(neve));
        format(file, sizeof(file), \"/Jatekosok/%s.txt\", neve);

 
Nem volna jobb ez a megoldás:
 

stock file(playerid)
{
    new file[200];
    format(file, sizeof(file), \"Jatekosok/%s.txt\",Nev(playerid));
    return file;
}
stock Nev(playerid)
{
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        return name;
}

 
Takarékosság szempontjából biztos vagyok benne, hogy a második megoldás jobb, viszont mivel elég sok dolgot kell ki/be töltögetnem aggályaim akadtak afelõl, hogy nem terhelné-e le túlságosan a szervert a folyamatos név betöltéssel és hasonlókkal? Véleményetek szerint inkább maradjak az elsõ módszernél vagy a második módszer sem terheli jobban a szervert mint az elsõ / melyik a jobb?
Válaszaitokat elõre is köszönöm :)
« Utoljára szerkesztve: 2014. augusztus 28. - 20:10:49 írta RusH. »

Nem elérhető M1A1

Melyik a gyorsabb és takarékosabb megoldás Dinihez?
« Válasz #1 Dátum: 2014. augusztus 28. - 16:58:50 »
+1 Show voters
PVar-t használva a folyamatos lekéregetést ki lehet küszöbölni:
 
stock file(playerid)
{
    if(!GetPVarType(playerid, \"PlayerFile\")) //Ha nem létezik a változó, akkor létrehozzuk
    {
        new file[200];
        format(file, sizeof(file), \"Jatekosok/%s.txt\",Nev(playerid));
        SetPVarString(playerid, \"PlayerFile\", pFile);
        return file;
    }
    else //Ellenkezõ esetben visszatérünk vele
    {
        new pFile[200];
        GetPVarString(playerid, \"PlayerFile\", pFile, sizeof(pFile));
        return pFile;
    }
}

 
Ugyan ezt megírod a stock Nev-nél is.
Elnézést, ha valamit rosszul írtam..
Szerk.:
Elvileg ha referenciaként adod át a playerid-t, akkor is valamivel gyorsabb lesz, mert így nem fog másolatot készíteni a paraméterül átadott változóról, hanem a már meglévõt használja. Vagy valami ilyesmi, pontosan nem tudom.. (Bocs ha rosszul tudom) Ja és ha már úgysem módosítod az értékét, add át konstansként:
 
stock file(const &playerid)

 
Szerk.2:
Ha nem globálisan (filterscriptek között is) használod az függvényt, akkor divkn megoldása talán jobb is, mint ahogy én írtam..
« Utoljára szerkesztve: 2014. augusztus 28. - 17:23:50 írta M1A1 »

Nem elérhető divkn

  • 3259
    • Profil megtekintése
Melyik a gyorsabb és takarékosabb megoldás Dinihez?
« Válasz #2 Dátum: 2014. augusztus 28. - 17:17:04 »
+1 Show voters
Létrehozol egy tömböt, OnPlayerConnectél megformázod a játékosnak betöltendõ fájl útvonalát és tárolod ebben a létrehozott változóban, mert így kevesebb AMX utasítást kap. Mert ha úgy csinálod, amit leírtál akkor újra és újra lekérdezed a játékos nevét és formázod a karakterláncot és halad tovább a mentéshöz.
 

stock filename[MAX_PLAYERS][14 + MAX_PLAYER_NAME];
public OnPlayerConnect(playerid)
{
    new n[MAX_PLAYER_NAME];
    GetPlayerName(playerid, n, MAX_PLAYER_NAME);
    format(filename[playerid],sizeof(filename[]),\"Jatekosok/%s.txt\", n);
    return;
}
// Ezek után használod a filename[playerid] változót.
« Utoljára szerkesztve: 2014. augusztus 28. - 17:26:37 írta divkn »

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Melyik a gyorsabb és takarékosabb megoldás Dinihez?
« Válasz #3 Dátum: 2014. augusztus 28. - 20:10:36 »
0 Show voters
Nagyon szépen köszönöm a segítséget :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal