我从字节数组中成功运行程序集(exe)。我的代码是:
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-60并且高达145mb(然后下降到10并再次循环)。
为什么会发生这种情况,什么会泄漏记忆以及如何解决这个问题?
答案 0 :(得分:3)
它没有泄漏记忆;你看到了垃圾收集的影响。垃圾收集可以推迟到将来某个时候,系统确定它需要更多内存;当流程使用突然下降时,这就是你的实例中发生的事情。
不要担心;这是完全正常的。而且,这是系统设计的方式;此行为不会影响您的执行时间或整体内存使用情况。
答案 1 :(得分:0)
在正常情况下,内存中没有程序集(字节数组)的N + 1副本。我会在那里寻找你的差距。