c# - 为什么程序集的调用会占用如此多的 RAM?

标签 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 并再次循环)。

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

最佳答案

它没有泄漏内存;您正在看到垃圾收集的效果。垃圾收集可以推迟到将来某个时候,当系统确定它需要更多内存时;这就是当进程使用率突然下降时您的实例中发生的情况。

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

关于c# - 为什么程序集的调用会占用如此多的 RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823616/

相关文章:

c# - WriteableBitmap访问冲突问题

Java getMethod 抛出方法未找到异常?

c# - 提高简短片段的可读性,同时让 StyleCop 满意

.net - 使用正则表达式修剪最后几位数字

c# - 我的内部连接有问题

java - 如何使用反射在构造函数中创建具有参数的类的实例?

java - 在访问私有(private)方法和变量时使用反射API好吗?

c# - 模型应该如何在 MVVM 中实现?

c# - 使用相同类型名称的结构序列化类

c# - 使用 C# 和 EmguCV 提取图像的 RGB 颜色直方图