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

发布于 2024-11-26 16:23:03 字数 604 浏览 1 评论 0原文

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

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

I'm successfuly running assembly (exe) from byte array. My code is:

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.");
     }
}

All fine, but the executable keeps leaking memory. The original needs 6-10MB, this one after the run produces 40-60 and up to 145mb (and then drops down to 10 and loops again).

Why is this happening, what leaks memory and any ideas how to fix that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情话已封尘 2024-12-03 16:23:03

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

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

It's not leaking memory; you're seeing the effects of garbage collection. Garbage collection can be deferred until some point in the future, when the system determines that it needs more memory; that's what's happening in your instance when the process usage suddenly drops.

Don't worry about it; it's perfectly normal. Moreover, it's the way the system is designed; this behavior is not affecting your execution time or overall memory usage.

梦里南柯 2024-12-03 16:23:03

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

Under normal circumstances you don't have an N+1 copy of the assembly (the byte array) in memory. I would look there for your disparity.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文