Я использую MoonSharp (1.6.0, только что обновлено, возникла проблема перед ним тоже) в .NET 4.6. У меня есть следующий код C#:Почему MoonSharp DoString пропускает память?
public class LuaCore {
public static Script script = new Script();
public static DynValue Call(string func)
{
return script.DoString(func);
}
}
Похоже, что всякий раз, когда я называю LuaCore.Call("any code")
дополнительно ~ 1,5 килобайта используются программой. Это также происходит тогда, any code
- stuff = nil
, следовательно, «любой код».
Когда это называется около 3500 раз в секунду, каждые 25 секунд используются дополнительные 25 мегабайт, а вызов в секунду зависит от мощности аппарата. Поскольку для каждого обновления будет использоваться несколько вызовов, использование памяти в программе также увеличится быстрее (протестировало это). Через 5 минут я получаю OutOfMemoryException (с использованием 1,4 ГБ).
Я сделал снимок кучи с приложением, используя 1,5 ГБ оперативной памяти. Кажется, что интерпретатор хранит каждый исходный код, который был вызван, или он выглядит так, как с помощью диагностических инструментов VS.
Почему MoonSharp хранит столько данных при каждом звонке?
Возьмите профайлер памяти и посмотрите, какие объекты хранятся в памяти и кто их удерживает. После этого вам будет намного легче ответить на ваш вопрос. –
Я добавил некоторые детали и скриншот с объектами, хранящимися в памяти. – Exec