Frage zum schnelleren Speichern und Laden

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Geht das irgendwie noch schneller zu speichern oder zu laden ohne das Dini Land zu verlassen? Und würde das zu lange dauern wenn man ein flüssiges Spiel liefern will?
    for(new i = 0; i<100; i++)
    {
    if(Inventar[playerid][pCannabis][i] > 0.00){format(string,sizeof(string),"Cannabis Qualität: %d%:",i);dini_FloatSet(file,string,Inventar[playerid][pCannabis][i]);}
    if(Inventar[playerid][pCrystalMeth][i] > 0.00){format(string,sizeof(string),"Crystal Qualität: %d%:",i);dini_FloatSet(file,string,Inventar[playerid][pCrystalMeth][i]);}
    if(Inventar[playerid][pHeroin][i] > 0.00){format(string,sizeof(string),"Heroin Qualität: %d%:",i);dini_FloatSet(file,string,Inventar[playerid][pHeroin][i]);}
    if(Inventar[playerid][pCocaine][i] > 0.00){format(string,sizeof(string),"Kokain Qualität: %d%",i);dini_FloatSet(file,string,Inventar[playerid][pCocaine][i]);}
    }



    for(new i = 0; i<100; i++)
    {
    format(string,sizeof(string),"Cannabis Qualität: %d%:",i);
    if(dini_Float(file,string) > 0.00){Inventar[playerid][pCannabis][i] = dini_Float(file,string);}
    format(string,sizeof(string),"Crystal Qualität: %d%:",i);
    if(dini_Float(file,string) > 0.00){Inventar[playerid][pCrystalMeth][i] = dini_Float(file,string);}
    format(string,sizeof(string),"Heroin Qualität: %d%:",i);
    if(dini_Float(file,string) > 0.00){Inventar[playerid][pHeroin][i] = dini_Float(file,string);}
    format(string,sizeof(string),"Kokain Qualität: %d%:",i);
    if(dini_Float(file,string) > 0.00){Inventar[playerid][pCocaine][i] = dini_Float(file,string);}
    }

    3 Mal editiert, zuletzt von seegras () aus folgendem Grund: PWN Tags funktionieren nicht durch imaginäre BB Codes

  • if(dini_Float(file,string) > 0.00)
    Diese Abfragen kannst du dir sparen, da du dadurch den Wert im schlechtesten Fall doppelt ausliest, für alle 400 Werte, sprich 800 mal.


    Ohne Dini zu verlassen, bekommst du das aber ansonsten nicht performanter hin.
    Du müsstest entweder auf ein System wie MySQL umsteigen, oder das Schreiben und Lesen in/aus der Datei eigens durchführen, dann hast du anstatt der 400 Dateiaufrufe nur noch einen.

  • "Diese Abfragen kannst du dir sparen, da du dadurch den Wert im schlechtesten Fall doppelt ausliest"


    Hat sich so angehört als würde es nicht klappen. Aber wieso wird der Wert 2 mal ausgelesen?

  • Das klappt schon, nur liest du den Wert 2 mal aus der Datei.
    Einmal in der Abfrage, ob der Wert > 0.00 ist und dann nochmal, um den Wert in die Variable zu schreiben.


    Du kannst es ohne die if-Abfrage schreiben, wenn 0 drin steht, schreibt er halt 0 in deine Variable.

  • Ach so meinst du das, ja stimmt das ergibt Sinn. Ich werde mal schauen wie lange das dauert und ob es so klappt. Danke dir.


    Ach und schreibt er auch 0 rein wenn es gar nicht existiert?

  • Schreiben sollte er laut deinem Code nur, wenn der Wert > 0.00 ist.
    Achte aber darauf, dass wenn der Wert in der Datei nicht 0.00 ist, im Spieler aber auf 0.00 geändert wurde, er den neuen Wert (0.00) dann nicht speichert.
    Eventuell macht es dort auch Sinn, die if-Abfrage zu entfernen.