我成功地从字节数组运行程序集(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 并再次循环)。
为什么会发生这种情况,什么会泄漏内存以及如何解决这个问题?
最佳答案
它没有泄漏内存;您正在看到垃圾收集的效果。垃圾收集可以推迟到将来某个时候,当系统确定它需要更多内存时;这就是当进程使用率突然下降时您的实例中发生的情况。
不用担心;这是完全正常的。而且,这就是系统的设计方式;此行为不会影响您的执行时间或总体内存使用情况。
关于c# - 为什么程序集的调用会占用如此多的 RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823616/