私はバイト配列から正常にアセンブリ(exe)を実行しています。私のコードは:なぜアセンブリの呼び出しに非常に多くのRAMが必要ですか?
public static void Execute(byte[] assembly, string arg) {
if (assembly[0x3c] == 0x80) {
object[] o = new object[] { new string[] { arg } };
try {
Assembly.Load(assembly).EntryPoint.Invoke(null, o);
} catch (TargetInvocationException e) {
throw e.InnerException;
}
} else {
throw new Exception("File is not a valid .NET assembly.");
}
}
すべてが問題ありませんが、実行可能ファイルはメモリをリークしています。元のファイルは6〜10MB必要ですが、このファイルを実行すると40〜60MB、最大145MBのファイルが作成されます(そして10に落として再びループします)。
なぜこのようなことが起こりますか、メモリとアイデアを漏らすのはなぜですか?
はい、ただし、gcメモリバッファを解放して解放する必要があります。だから私は何とかそれを埋めて、それを収集すると思う。それは通常10MBに達し、今は150MBのようです。 – blez
150mbはあまりにも多く、私は何とかそれを低くする必要があります。 – blez
@ blez、あなたのマシンの_any_プロセスがメモリを必要とするとすぐに、.NETはガベージコレクションを実行し、残ったままのジャンクをクリーンアップします。何人かの人々は自分の家をいつもきちんとした状態に保つのが好きで、何人かの人は来るときだけ清掃するのが好きです。 .NETは後者に似ています。それにもかかわらず、ゲスト(他のプロセス)はきれいな家しか見ることができません。 –