为什么程序集的Invoke占用了这么多内存?

时间:2011-07-25 23:25:40

标签: c# .net reflection memory-leaks memory-management

我从字节数组中成功运行程序集(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并再次循环)。

为什么会发生这种情况,什么会泄漏记忆以及如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

它没有泄漏记忆;你看到了垃圾收集的影响。垃圾收集可以推迟到将来某个时候,系统确定它需要更多内存;当流程使用突然下降时,这就是你的实例中发生的事情。

不要担心;这是完全正常的。而且,这是系统设计的方式;此行为不会影响您的执行时间或整体内存使用情况。

答案 1 :(得分:0)

在正常情况下,内存中没有程序集(字节数组)的N + 1副本。我会在那里寻找你的差距。