Registrierung
Linkliste Second Forum Chat Second Forum Treffen Suche Mitgliederliste Häufig gestellte Fragen Gästebuch Kalender

 
Amazonien Rollenspiel in SL
 

Hier kann man sich über die letzten Beiträge im Board live informieren, das kleine Fenster welches sich durch einen Klick öffnet aktualisiert sich von alleine alle 60 Sekunden.

Guckloch öffnen
 

Second Forum - Ein deutschsprachiges Forum zu Second Life » Support zu Second Life » Fragen zu Scripting in Second Life » Perfomance von Scripten » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen


Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Perfomance von Scripten
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »

Vega Elcano
unregistriert
Perfomance von Scripten 20.03.2010 13:37 [OPTIONEN] [HOCH] [RUNTER]

Hallo Leute,

ich habe da so eine Frage, die ich hier gerne mal diskutrieren würde. Ich bin gerade dabei mir eine Digitaluhr zu bauen. Bei einer Uhr müssen ja zwangsweise die Ziffern sekündlich geupdatet werden. Ich habe im Moment drei Bereiche (Stunden, Minuten, Sekunden), die jeweils aus einem Prime mit einer Textur bestehen. Auch wenn diese verlinkt sind, komme ich wohl nicht darum herum in jeden Ziffernbereich ein Skript hinein zu tun. Jetzt überlege ich mir, was bezüglich Serverseitiger Resourcenschonung besser ist:

1) Ich programmieren für jede Ziffer einen sekündlichen Timer-Event und prüfe, ob die Ziffer geupdatet werden muss.

2) Ich tue in den Sekundenbereich eine Steuerung mit rein, die jede Minute und jede Stunde eine Link-Message erzeugt, die die anderen Ziffern zum Updaten triggert.

Bei Punkt eins sehe ich den Vorteil, das ein Timer-Event für den Scheduler der Sim wohl eines der aller einfachsten Dinge ist, und deshalb wenig Rechenzeit verbraucht. Dafür ist natürlich dann eine Anfrage in dem LSL-Script die abgearbeitet werden muss. Auch wenn diese Abfrage im Verhältnis zur Scheduling-Rate des Servers wohl selten abgearbeitet werden muss, bleibt es natürlich langsamer Bytecode der vom Interpreter der virtuellen Maschiene abgearbeitet werden muss.

Punkt zwei benötigt wiederrum einen etwas komplizierteren Filter für jede Linkmessage. Dieser Filter wird zwar wohl in nativem Code direkt auf dem Prozessor des Sim-Servers abgearbeitet, dafür muss er aber in jedem Scheduling Takt abgearbeitet werden und nicht nur bei relativ seltenen Timer-Events.

Insofern würde es mich mal interessieren, was da die bessere Variante ist, oder ob ich dabei irgendetwas falsch verstanden habe.

Schöne Grüße
Vega
Der Betreiber und die Moderatoren von Second Forum distanzieren sich hiermit ausdrücklich von dem von Vega Elcano am 20.03.2010 um 13:37 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung.


Brigitt Loening Brigitt Loening ist männlich
Amazone


images/avatars/avatar-1377.jpg

[meine Galerie]


Dabei seit: 08.06.2008
Beiträge: 1.857
SL Nick: Brigitt Loening
Second Life Geburtstag: 17.02.2008

21.03.2010 10:35 [OPTIONEN] [HOCH] [RUNTER]

Ich würde nur ein Script verwenden, das die Prüfungen durchführt und in Abhängigkeit davon mit der Funktion

code:
1:
Function: llSetLinkTexture( integer linknumber, string texture, integer face );
die Texturen der verlinkten Prims setzen. Das wär nur ein Script und das ist auf jeden Fall günstiger.

__________________
Gestern standen wir kurz vor dem Abgrund, heute sind wir einen großen Schritt weiter.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Brigitt Loening: 21.03.2010 10:37.

Der Betreiber und die Moderatoren von Second Forum distanzieren sich hiermit ausdrücklich von dem von Brigitt Loening am 21.03.2010 um 10:35 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung.


Vega Elcano
unregistriert
21.03.2010 12:52 [OPTIONEN] [HOCH] [RUNTER]

Zitat:
Original von Brigitt Loening am 21. März 2010, 10:35 Uhr
Ich würde nur ein Script verwenden, das die Prüfungen durchführt und in Abhängigkeit davon mit der Funktion

code:
1:
Function: llSetLinkTexture( integer linknumber, string texture, integer face );
die Texturen der verlinkten Prims setzen. Das wär nur ein Script und das ist auf jeden Fall günstiger.


Hallo Brigitt,

vielen Dank für diesen Tipp. Den Befehl "llSetLinkTexture" habe ich doch glatt im Wiki übersehen. In Komibnation mit "llSetLinkPrimitiveParams" löst das genau mein Problem. Die Variante mit nur einem Script ist natürlich besser als meine zwei Ansätze Smile (Ich hatte schon so ein Gefühl, dass ich da irgendetwas noch falsch betrachtet hatte).

Schöne Grüße
Vega
Der Betreiber und die Moderatoren von Second Forum distanzieren sich hiermit ausdrücklich von dem von Vega Elcano am 21.03.2010 um 12:52 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung.


Gwador Merlin Gwador Merlin ist männlich
SF As


images/avatars/avatar-1654.jpg

[meine Galerie]


Dabei seit: 17.09.2009
Beiträge: 160
SL Nick: Gwador Merlin

21.03.2010 15:22 [OPTIONEN] [HOCH] [RUNTER]

Erstmal: TimerEvent = Lag. Leider ist es so.

Zum anderen bin ich mir nicht sicher, ob der Timerevent wirklich exakt genug für eine Uhr ist. Was macht der, wenn es laggt?

Auch llSleep(1) (hält script für eine Sekunde an) ist keine gute Idee, die Uhr würde immer nachgehen.

Besser wäre es, die Systemuhrzeit der Server abzufragen und die Uhr danach zu setzen. Dafür gibts die Funktionen

llGetTimestamp : Gibt die UTC (Greenwich)-Zeit incl. Datum als String zurück.
String in eine Liste lesen und auseinanderbröseln ergäbe dann die einzelnen Stellen der Uhr, ggf. mit Datum.

llGetGMTClock: liefert die Anzahl der Sekunden seit Mitternacht zurück, ebenfalls in der UTC (Greenwich) Zeitzone.
Der Rest ist trickreich rechnen: Durch 60 teilen, Ergebnis einmal als float, einmal als Integer - die differenz, die Nachkommastellen mit 60 Multipliziert ergeben die Sekunden der Uhr.. usw.

Beide Verfahren haben den Vorteil, dass man die Uhr nie stellen muss und eine Anpassung an Zeitzonen und Sommerzeit / Winterzeit recht einfach ist.

__________________
Wer Focebook für ein soziales Netz hält, für den ist in die Steckdose fassen auch ne Wellnesskur.
Der Betreiber und die Moderatoren von Second Forum distanzieren sich hiermit ausdrücklich von dem von Gwador Merlin am 21.03.2010 um 15:22 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung.


Vega Elcano
unregistriert
21.03.2010 16:02 [OPTIONEN] [HOCH] [RUNTER]

Zitat:
Original von Gwador Merlin am 21. März 2010, 15:22 Uhr
Erstmal: TimerEvent = Lag. Leider ist es so.

Zum anderen bin ich mir nicht sicher, ob der Timerevent wirklich exakt genug für eine Uhr ist. Was macht der, wenn es laggt?

Auch llSleep(1) (hält script für eine Sekunde an) ist keine gute Idee, die Uhr würde immer nachgehen.


Hallo Gwador,

laggt ein Timerevent mehr als ein llSleep()? Wobei ich meine, was ist für den Server angenehmer? Das der Timer-Event teilweise ungleichmäßig ausgelöst wird, ist mir hierbei nicht so wichtig.

Zitat:

Besser wäre es, die Systemuhrzeit der Server abzufragen und die Uhr danach zu setzen. Dafür gibts die Funktionen

llGetTimestamp : Gibt die UTC (Greenwich)-Zeit incl. Datum als String zurück.
String in eine Liste lesen und auseinanderbröseln ergäbe dann die einzelnen Stellen der Uhr, ggf. mit Datum.


hmm ..., also die Funktion "llGetTimestamp()" verwende ich sowieso schon. Du hast natürlich vollkommen Recht, dass man sich nicht darauf verlassen kann, das ein Timer-Event exakt genug ausgeführt wird, um einen eignenstängigen Zähler zu programmieren.

Allerdings hat man mit der Funktion "llGetTimeStamp()" doch immer noch nicht das Problem gelöst, das die Uhrzeit regelmäßig geupdatet werden muss. Eine Endlosschleife mit "llSleep()" wäre natürlich auch eine Lösung, nur da dachte ich, ein Timer-Event sei harmloser, da das Script zwischen den Events vom Scheduler doch vollkommen deaktiviert werden kann (was bei einem "llSleep()" doch wahrscheinlich nur bedingt der Fall ist?). Zumindest bin ich es sonst eigentlich gewohnt, das man lieber eine Event-gesteuerte Strucktur implementiert, als quasie einen eigenen Scheduler zu implementieren. Falls das bei LSL anders sein sollte, lasse ich mich da gerne eines besseren belehren.

Zitat:

llGetGMTClock: liefert die Anzahl der Sekunden seit Mitternacht zurück, ebenfalls in der UTC (Greenwich) Zeitzone.
Der Rest ist trickreich rechnen: Durch 60 teilen, Ergebnis einmal als float, einmal als Integer - die differenz, die Nachkommastellen mit 60 Multipliziert ergeben die Sekunden der Uhr.. usw.


oder man nimmt den Modulo-Operator:

code:
1:
integer sec = llGetGMTClock() % 60


Schöne Grüße
Vega
Der Betreiber und die Moderatoren von Second Forum distanzieren sich hiermit ausdrücklich von dem von Vega Elcano am 21.03.2010 um 16:02 verfassten Beitrag.
Sollte dieser Beitrag Ihre Rechte verletzen, bitten wir um Benachrichtigung.

Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Second Forum - Ein deutschsprachiges Forum zu Second Life » Support zu Second Life » Fragen zu Scripting in Second Life » Perfomance von Scripten

Views heute: 2.579 | Views gestern: 8.744 | Views gesamt: 44.549.622



Impressum


Forensoftware: Burning Board 2.3.6
Designed by: ART[I]SIGN GbR
#top #top