2012-02-09 10 views
5

Estoy usando el compresor UPX para comprimir mi aplicación escrita en Delphi XE. El tamaño del archivo va desde aproximadamente 32 Mb a 8 Mb.¿Por qué mi aplicación usa más memoria después de comprimirla con UPX y qué puedo hacer al respecto?

Lo extraño que noté, sin embargo, es que la ocupación de la RAM aumenta significativamente cuando se ejecuta el archivo comprimido. De 25/30 Mb va a unos 80 Mb. ¿Es esto normal o es un problema que debes tener? En mi caso, dado que la aplicación se ejecuta en el modo de escritorio remoto de Windows Server 2008 con múltiples usuarios, el sistema pesa desproporcionadamente.

¿Por qué sucede esto? ¿Como puedó resolver esté problema?

+1

¿Cuántos usuarios ejecutan la aplicación a la vez? Cada instancia del proceso consume memoria física por separado si usa un compresor. Las páginas no pueden ser compartidas. ¿Cuál es tu motivación para usar UPX? –

+0

No sé específicamente sobre UPX, pero al menos algunos compresores de PE descomprimen la imagen completa en la memoria en el momento de la puesta en marcha. Esto es diferente de los PE regulares donde las secciones individuales se localizan según sea necesario. –

+0

¿Estás seguro de que no tienes información de depuración vinculada al ejecutable? Eso generalmente hace una diferencia aún mayor para su tamaño de archivo que la compresión. Una de mis aplicaciones es de 17 MB con información de depuración y menos de 3 sin ella. –

Respuesta

20

Así funcionan los compresores EXE. Comprimen el archivo de disco , no el código ejecutable. Para volver a hacer que el archivo comprimido sea ejecutable, debe descomprimirse y los datos no comprimidos se almacenan en la memoria. Con un archivo EXE común, no comprimido, el SO cargará solo las partes del archivo que se requieren en este momento. El resto puede permanecer en el disco. Como toda la aplicación no comprimida está en la memoria, es por eso que el uso de la memoria parece más alto.

Además, varios usuarios pueden compartir el archivo de disco, mientras que la memoria que contiene el ejecutable descomprimido no se comparte. Cada usuario que ejecuta su programa tiene una copia separada del programa descomprimido.

Los 26 MB de espacio en disco que está guardando al comprimir su programa son prácticamente nada en un servidor de escritorio remoto compartido. No se moleste en comprimir el archivo. Si desea comprimir el archivo para ahorrar ancho de banda durante la distribución, empaque su programa en un instalador que descomprime el archivo una vez en el momento de la instalación en lugar de un compresor EXE que necesita descomprimir el archivo cada vez que alguien lo ejecute.

+1

+1 Para la descripción técnica de descompresión en la memoria y el consejo de NO comprimir un programa. Para Enzo: mejor ** no uses UPX ** sobre ejecutables Delphi. Se pueden producir muchos avisos de falsos positivos debido al antivirus, por lo que [UPX no vale la pena para las aplicaciones de Delphi Desktop] (http://stackoverflow.com/questions/8937492/what-is-upxs-best-compression-method/ 8938525 # 8938525). –

+0

¡Gracias, Rob Kennedy, has sido minucioso! –

+1

@EnzoCostantini puedes aceptar su respuesta entonces. ;) – EMBarbosa

Cuestiones relacionadas