Почему Invoke сборки занимает так много оперативной памяти? - PullRequest
2 голосов
/ 26 июля 2011

Я успешно запускаю сборку (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-10 МБ, этот после запуска выдает 40-60 и до 145 МБ (а затем падает до 10 и снова зацикливается).

Почему это происходит, что приводит к утечке памяти и любые идеи, какэто исправить?

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Это не утечка памяти;вы видите последствия сбора мусора.Сборка мусора может быть отложена до определенного момента в будущем, когда система определит, что ей нужно больше памяти;это то, что происходит в вашем случае, когда использование процесса внезапно падает.

Не беспокойтесь об этом;это совершенно нормально.Более того, так устроена система;это поведение не влияет на время выполнения или общее использование памяти.

0 голосов
/ 26 июля 2011

В нормальных условиях у вас нет N + 1 копии сборки (байтового массива) в памяти. Я бы посмотрел там на ваше несоответствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...