User:Daemonika Nightfire/Scripts/Memory Walkthrough

From Second Life Wiki
Jump to navigation Jump to search

Memory Walkthrough

Dieses Script beinhaltet Beispiele zum ueberpruefen von Script-Memory und den maximalen Verbrauch bestimter Funktionen.

<lsl> /*

   Memory-walkthrough by Daemonika Nightfire (daemonika.nightfire)
   Used commands:
   
   integer llSetMemoryLimit(integer limit)     // legt das maximale Memorylimit fuer das Script fest
   integer llGetMemoryLimit()                  // gibt den Wert des Memorylimits zurueck
   integer llGetUsedMemory()                   // gibt den Wert des gesamten Memory-verbrauchst zurueck
   integer llGetFreeMemory()                   // gibt den Wert des freien Memorys zurueck
   
   llScriptProfiler(PROFILE_SCRIPT_MEMORY);    // startet Memory-ueberwachung
   llScriptProfiler(PROFILE_NONE);             // beendet Memory-ueberwachung
   integer llGetSPMaxMemory()                  // gibt den maximalen Memory-verbrauch des ScriptProfilers zurueck
  • /

integer limit = 20000; // dient zum festlegen des maximalen Script-Memory-Limits

Test() // meine Funktion {

   // einfache Hovertext-Anzeige
   llSetText("Limited Memory " + (string)llGetMemoryLimit() +
             "\nUsed Memory " + (string)llGetUsedMemory() +
             "\nFree Memory " + (string)llGetFreeMemory(),<1,1,1>,1);

}

default {

   state_entry()
   {
       llSetMemoryLimit(limit);
       
       ///// Memory Profiler: testet den Speicherverbrauch saemtlicher Funktionen unterhalb dieses Befehls
       llScriptProfiler(PROFILE_SCRIPT_MEMORY); // startet Memory-ueberwachung
       
       Test(); // meine Funktion
       
       ///// Memory Profiler: beendet die ueberwachung des Speicherverbrauchs saemtlicher Funktionen oberhalb dieses Befehls
       llScriptProfiler(PROFILE_NONE); // beendet Memory-ueberwachung
       
       ///// gibt den maximalen Memory-verbrauch der getesteten Funktionen zurueck
       llSay(0,"This script used at most " + (string)llGetSPMaxMemory() + " bytes of memory during Test.");
       
       // Ausgabe sieht Folgendermassen aus:
       
       // Hovertext:
       // Limited Memory 20000
       // Used Memory 4972
       // Free Memory 15100
       
       // Chat:
       // [05:11] Object: This script used at most 4972 bytes of memory during Test.
   }

} </lsl>

Script run-time error: Stack-Heap Collision

Sobald der Memory eines Scriptes ueberladen ist (auch Mono), erscheint eine Fehlermeldung wie folgende im Chat, wenn man Script Error im Debug Channel anzeigen laesst.

[10:33:51]  Object: Object [script:New Script] Script run-time error
[10:33:51]  Object: Stack-Heap Collision

Diese Fehlermeldung bedeutet im Grunde, dass das Script den Geist aufgegeben hat und man es nur noch mit einem Manuellen Reset wieder zum Leben erwecken kann. Das ist aber nur eine voruebergehende Loesung, denn auf kurz oder lang passiert das gleiche wieder. Bei diesem Fehler ist eine ueberarbeitung des Scriptes durch den Ersteller zwingend erforderlich. Sollte das Objecte in dem sich das Script befindet (no modify) sein, bleibt nur noch weg schmeissen. Ausfuehrliche Details ueber Script Speicher sind hier zu finden: LlGetFreeMemory, LSL_Script_Memory & User:Omei_Qunhua.