Was ist Effizienz?
Effizienz bestimmt, wie lange es dauert, um ein Script auszuführen.
Es gibt viele Möglichkeiten, Scripte zu beschleunigen, man kann zum Beispiel ++a statt a++ benutzen.
Jedoch könnten die meisten jener Microoptimierungen zukünftig nicht nicht (mehr) gelten. Es gibt aber einige allgemeinen Richtlinien, die zu vermeiden sind:
Regeln zum Posten von Scripten
1. Bitte schreibe keine Theorien auf
2. Bitte schreibe nicht X ist schneller als Y., bitte schreibe «X benötigt X Millisekunden, Y benötigt Y Millisekunden..
Der folgende Code zeigt die Zeit in Millisekunden an, die jeder Funktionaufruf benötigt.
Bitte verändert das nachstehende Script nicht, denn jede kleine Änderung könnte die Effizienz ändern/beeinflussen.
Vielen Dank an Xaviar Czervik für die Erstellung des Originalcodes und an Strife Onizuka für die Optimierung des Codes.
//WICHTIG: Bitte führe Tests nur in einer leeren Region aus.
// Bitte reduziere Vermüllung und stelle sicher, dass Du keine Attachments trägst.
// Bevorzuge Tests auf einer privaten Sim, auf der sich keine anderen Nutzer befinden.
// Bewege Dich nicht, wenn der Test durchgeführt wird.
// Es gibt eine Bandbreite von Fehlern, das mehrmalige Durchführen von Tests ermöglicht es, diese genauer zu bestimmen.
integer time() {
string stamp = llGetTimestamp();
return (integer) llGetSubString(stamp, 11, 12) * 3600000 +
(integer) llGetSubString(stamp, 14, 15) * 60000 +
llRound((float)llGetSubString(stamp, 17, -2) * 1000000.0)/1000;
//llInsertString(llDeleteSubString(stamp, 19, 19) + "000000", 23, ".")
}
default {
state_entry() {
//test variables
float counter;
//framework variables
float i = 0;
float j = 0;
float max = 10000;
float start = time();
do {
//test
counter += 1;
}while (++i < max);
float delta = time();
do ; while (++j < max);
float end = time();//remove the time required by the framework
float t = ((delta - start) - (end - delta))/max;
llOwnerSay("The function in the loop took a total of " + (string)t + " milliseconds.");
}
}
Effizienz
Obwohl die folgenden Daten korrekt sind, wurde die oben genannte Funktion nicht genutzt.
Eine etwas weniger optimierte Version von Xaviar Czervik wurde genutzt.
Könnte bitte jemand die Tests mit der oben genannten Funktion wiederholen?
Theoretisch sind ++a und a +=1 in der Geschwindigkeit gleich. Dies stimmt aber nicht:
++a: 0.364700 millis a += 1: 0.346900 millis a++: 0.413700 millis
Test der selben Funktion für Schleifen:
´
++a: 0.358370 millis a += 1: 0.351200 millis a++: 0.424600 millis
llOwnerSay v. llSay v. llShout v. llWhisper (Kanal 0, sofern anwendbar):
llOwnerSay(): 4.359000 millis llWhisper(): 5.201000 millis llSay(): 5.226000 millis llShout(): 14.877000 millis
Verschiedene Kanäle (llSay() Used for all):
-100000000: 1.226400 millis -100000: 1.254300 millis -100: 1.296100 millis -1: 1.292400 millis 0: 5.226000 millis 1: 1.242300 millis 100: 1.249100 millis 100000: 1.219700 millis 100000000: 1.228700 millis
Größe des Textes (llSay() and Channel 1 used for all):
1 Character: 1.242300 millis 10 Characters: 1.309700 millis 100 Characters: 1.965600 millis
Home | Funktionen | Events | Typen | Kontrollstrukturen| Beispiele