Difference between revisions of "User:Daemonika Nightfire/Scripts/Memory Walkthrough"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with "==Memory Walkthrough== This Script show you how you can limit the maximal memory for each script. Note: you need the following group to visit the BlueSteel Sandbox: secondlife://…")
 
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Memory Walkthrough==
==Memory Walkthrough==
This Script show you how you can limit the maximal memory for each script.
Dieses Script beinhaltet Beispiele zum ueberpruefen von Script-Memory und den maximalen Verbrauch bestimter Funktionen.
Note: you need the following group to visit the BlueSteel Sandbox: secondlife:///app/group/19657888-576f-83e9-2580-7c3da7c0e4ca/about that you can test the new funktions.
 
sorry for the german description, but i am german :P
<source lang="lsl2">
<lsl>
/*
/*
     Memory-walkthrough by Daemonika Nightfire (daemonika.nightfire)
     Memory-walkthrough by Daemonika Nightfire (daemonika.nightfire)
     Used commands:
     Used commands:
      
      
     integer llSetMemoryLimit(integer limit)    // legt das maximale Memorylimit fuer das Script fest (verfuegbar ab Server 11.08.08.237997)
     integer llSetMemoryLimit(integer limit)    // legt das maximale Memorylimit fuer das Script fest
     integer llGetMemoryLimit()                  // gibt den Wert des Memorylimits zurueck (verfuegbar ab Server 11.08.08.237997)
     integer llGetMemoryLimit()                  // gibt den Wert des Memorylimits zurueck
     integer llGetUsedMemory()                  // gibt den Wert des gesamten Memory-verbrauchst zurueck (verfuegbar)
     integer llGetUsedMemory()                  // gibt den Wert des gesamten Memory-verbrauchst zurueck
     integer llGetFreeMemory()                  // gibt den Wert des freien Memorys zurueck (verfuegbar)
     integer llGetFreeMemory()                  // gibt den Wert des freien Memorys zurueck
   
    llScriptProfiler(PROFILE_SCRIPT_MEMORY);    // startet Memory-ueberwachung (verfuegbar)
    llScriptProfiler(PROFILE_NONE);            // beendet Memory-ueberwachung (verfuegbar)
    integer llGetSPMaxMemory()                  // gibt den durchschnittlichen Memory-verbrauch des ScriptProfilers zurueck (verfuegbar)
   
    tested on BlueSteel-Sandbox:
    http://maps.secondlife.com/secondlife/BlueSteel%20Sandbox%203/199/180/23
      
      
    llScriptProfiler(PROFILE_SCRIPT_MEMORY);    // startet Memory-ueberwachung
    llScriptProfiler(PROFILE_NONE);            // beendet Memory-ueberwachung
    integer llGetSPMaxMemory()                  // gibt den maximalen Memory-verbrauch des ScriptProfilers zurueck
*/
*/


Line 46: Line 41:
         llScriptProfiler(PROFILE_NONE); // beendet Memory-ueberwachung
         llScriptProfiler(PROFILE_NONE); // beendet Memory-ueberwachung
          
          
         ///// gibt den durschschnittlichen Memory-verbrauch der getesteten Funktionen zurueck
         ///// gibt den maximalen Memory-verbrauch der getesteten Funktionen zurueck
         llSay(0,"This script used at most " + (string)llGetSPMaxMemory() + " bytes of memory during Test.");
         llSay(0,"This script used at most " + (string)llGetSPMaxMemory() + " bytes of memory during Test.");
          
          
Line 60: Line 55:
     }
     }
}
}
</lsl>
</source>
 
==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 Object 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]].

Latest revision as of 09:06, 6 February 2015

Memory Walkthrough

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

/*
    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.
    }
}

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 Object 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.