私は.NET 4.6の下でMoonSharp(1.6.0、ちょうど更新され、問題もあった)を使用しています。MoonSharp DoStringがメモリをリークしているのはなぜですか?
public class LuaCore {
public static Script script = new Script();
public static DynValue Call(string func)
{
return script.DoString(func);
}
}
それは私が〜1.5キロバイトはプログラムで使用されている追加のLuaCore.Call("any code")
を呼び出すたびのように思える:私は、次のC#のコードを持っています。これは、any code
がstuff = nil
であるため、「任意のコード」となります。
これを1秒間に約3500回呼び出すと、5秒ごとに25メガバイトがさらに使用され、1秒あたりの呼び出しはマシンの電源によって異なります。 1回の更新で複数の呼び出しが使用されるため、プログラムのメモリ使用量も高速になります(テスト済み)。 5分後に、私はOutOfMemoryExceptionを取得しました(1.4GBを使用)。
1.5GBのRAMを使用して、アプリケーションでヒープのスナップショットを撮りました。インタプリタは、呼び出された各ソースコードを保存しているか、VSの診断ツールでそのように見えます。
MoonSharpが各呼び出しで多くのデータを格納するのはなぜですか?
メモリプロファイラを実行し、メモリに保持されているオブジェクトとそのオブジェクトを保持しているオブジェクトを確認します。それ以降は、あなたの質問にもっと簡単に答えてくれるでしょう。 –
ラムに保持されたオブジェクトの詳細とスクリーンショットを追加しました。 – Exec