User:Daemonika Nightfire/Scripts/Memory Walkthrough
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.