Ich benutze MoonSharp (1.6.0, gerade aktualisiert, hatte das Problem schon vorher) unter .NET 4.6. Ich habe den Code # folgenden C:Warum verliert MoonSharp DoString Speicher?
public class LuaCore {
public static Script script = new Script();
public static DynValue Call(string func)
{
return script.DoString(func);
}
}
Es scheint, als wenn ich nenne LuaCore.Call("any code")
zusätzliche ~ 1,5 Kilobyte durch das Programm verwendet werden. Dies geschieht auch dann, any code
ist stuff = nil
, daher "jeder Code".
Wenn diese ca. ~ 3500 Mal pro Sekunde aufgerufen wird, werden weitere 25 Megabyte alle fünf Sekunden verwendet, und der Anruf pro Sekunde hängt von der Leistung des Geräts ab. Da pro Update mehrere Aufrufe verwendet würden, würde auch die Speichernutzung des Programms schneller zunehmen (dies getestet). Nach 5 Minuten bekomme ich eine OutOfMemoryException (mit 1.4GB benutzt).
Ich habe einen Snapshot des Heaps mit der App mit 1,5 GB RAM gemacht. Es scheint, dass der Interpreter jeden Quellcode speichert, der aufgerufen wurde, oder es sieht so aus mit den Diagnosewerkzeugen von VS.
Warum speichert MoonSharp bei jedem Anruf so viele Daten?
Nehmen Sie Speicherprofiler und sehen Sie, welche Objekte im Speicher gehalten werden und wer sie hält. Es wird viel einfacher sein, Ihre Frage danach zu beantworten –
Ich habe einige Details hinzugefügt und einen Screenshot mit den Objekten in Ram gehalten. – Exec