Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#116

AW: ScriptEngine II (v. 0.6)

  Alt 18. Mär 2011, 15:16
Es gibt mehrere Caching-Systeme in der Script-Engine, die ich kurz erläutern will.
  • Compiler-Cache
    Der Compiler-Cache (TSE2UnitCacheMngr) hilft für die schnellere Re-Compilierung von Scripts. Er ist vergleichbar mit .DCU-Dateien in Delphi. Dort drinnen stehen relativ viele Informationen, d.h. es kann sehr schnell zur 5 MB Speicherverbrauch kommen. Auf den Manager kann ohne Probleme verzichtet werden, da er nur optional ist. Nachteil ist dann aber, dass bei jedem Compile() alle Script-Units erneut kompiliert werden müssen. Eine Zwischenlösung gibt es aber: die Klasse "TSE2UnitCacheMngr" bietet ein (noch undokumentiertes) Event an ("OnGetCacheStream"), in dem man einen Stream angeben kann, in der der Compiler-Output hinein- bzw. heraus-serialisiert wird. Dort könnte man z.B. einen TFileStream übergeben, womit der RAM entlastet wird. Setzt man in dem Event den Parameter "Cache" auf "nil", wird automatisch ein TMemoryStream angelegt und verwendet.

    Die Script-Engine ist beim kompilieren zwar nicht die langsamste, aber wirklich schnell ist sie nicht. Das liegt daran, dass ich eher darauf Wert gelegt habe, die fertig kompilierten Scripts zu speichern und diese dann schnell zu laden. Die fertig kompilierten Scripts sind relativ klein und können so zum einen schnell geladen werden und zum anderen verbrauchen diese nicht so viel RAM.
  • RunTime-Cache (pro RunTime-Instanz)
    Die RunTime hat auch einen Memory-Cache, der die Ausführungsgeschwindigkeit erhöht. Dieser Cache vermindert das ständige Abfragen und Freigeben von RAM vom/zum Betriebssystem, in dem es einen fixen Memory-Block anfragt und mit diesem arbeitet. Falls für ein Script mehr Arbeitsspeicher benötigt wird als in diesen Block passen, greift SEII wieder auf "GetMem()" und "FreeMem()" zurück.

    Die Größe dieses Caches ist in 3 Stufen einstellbar. Komplett aus - klein - und groß. Diese Konfiguration ist über die Datei "ScriptEngine.inc" zu lösen und somit während der Laufzeit nicht änderbar.
  • RunTime-Helper-Cache (pro Thread innerhalb eines RunTime-Objekts)
    Zusätzlich zum Memory-Cache gibt es noch einen Cache für die Verwaltungsobjekte innerhalb der Script-RunTime. Dieser Cache ist Thread-Bezogen, da er für den Execution-Stack der RunTime verwantwortlich ist.

    Dieser Cache ist nicht deaktivierbar, ist jedoch sehr klein (ca. 2,5 kb)
Ich hoffe, ich konnte dir mit der Beschreibung etwas weiterhelfen.

Wegen dem Implementierungsfortschritt: die Arrays sind soweit drinnen und funktionieren auch fast ohne Probleme (gibt noch ein paar Baustellen). Jedoch habe ich im Moment wenig Zeit, wodurch sich der Release leider etwas verzögert. Vielleicht bringe ich zur Überbrückung auch noch ein Zwischen-Release heraus, in der die Arrays noch deaktiviert sind, da ich doch noch ein paar kleine Fehler entdeckt habe.

Gruß
David
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat