Сокращение использования памяти динамически загружаемого приложения - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть приложение размером 18 МБ, и я сжимаю его с помощью deflate. Затем я создаю другой проект и встраиваю этот сжатый файл в качестве ресурса, загружаю и распаковываю его. Затем я запускаю приложение. Однако я обнаружил, что приложение, которое распаковывается во время выполнения, а затем запускается, использует примерно в 2 раза больше памяти. Я пытался позвонить G C, но безрезультатно. Мой код:

byte[] data = null;

using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("x.y"))
{
    using (DeflateStream deflateStream = new DeflateStream(stream, CompressionMode.Decompress))
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            deflateStream.CopyTo(memoryStream);
            data = memoryStream.ToArray();
        }
    }
}

Assembly assembly = Assembly.Load(data);
assembly.EntryPoint.Invoke(null, new object[] { });

Мое приложение при запуске без сжатия (только при запуске исполняемого файла 18 МБ) использует около 25 МБ памяти, однако при запуске сжатого двоичного файла оно использует около 43 МБ памяти. Может кто-нибудь помочь мне исправить это?

Спасибо

EDIT : Хорошо, я обнаружил, что извлечение сжатого файла во временный путь с последующим использованием Process.Start или Assembly.LoadFile будет использовать меньше памяти. Тем не менее, я хотел бы сохранить портативность и не делать этого.

...