Почему мое приложение использует больше памяти после сжатия с помощью UPX, и что я могу с этим поделать? - PullRequest
5 голосов
/ 10 февраля 2012

Я использую компрессор UPX для сжатия своего приложения, написанного на Delphi XE.Размер файла варьируется от 32 МБ до 8 МБ.

Странная вещь, которую я заметил, однако, это то, что занятость ОЗУ значительно увеличивается при запуске сжатого файла.От 25/30 Мб уходит примерно до 80 Мб.Это нормально или это проблема, которую стоит оставить?В моем случае, поскольку приложение работает в режиме удаленного рабочего стола Windows Server 2008 с несколькими пользователями, система весит непропорционально.

Почему это происходит?Как я могу решить эту проблему?

1 Ответ

20 голосов
/ 10 февраля 2012

Вот так работают компрессоры EXE.Они сжимают файл на диске , а не исполняемый код .Чтобы снова сделать сжатый файл исполняемым, его нужно распаковать, и эти несжатые данные будут сохранены в памяти.При использовании обычного несжатого EXE-файла ОС загружает только те части файла, которые требуются в данный момент.Остальные могут остаться на диске.Поскольку все ваше несжатое приложение находится в памяти, поэтому использование памяти оказывается выше.

Кроме того, файл на диске может совместно использоваться несколькими пользователями, тогда как память, содержащая несжатый исполняемый файл, не разделяется.У каждого пользователя, работающего с вашей программой, есть отдельная копия несжатой программы.

26 МБ дискового пространства, которое вы экономите, сжимая вашу программу, практически ничто на общем удаленном рабочем столесервер.Не беспокойтесь о сжатии файла.Если вы хотите сжать файл, чтобы сэкономить пропускную способность во время распространения, то упакуйте свою программу в программу установки, которая разархивирует файл один раз во время установки, вместо компрессора EXE, который должен распаковывать файл каждый раз, когда кто-либо запускает его.

...