PDA

Ver la Versión Completa : Tamaño de mi ejecutable


Ricardo Alfredo
12-03-2004, 03:33:27
:confused: se que esta pregunta se ha realizado con anterioridad, pero no me queda clara las respuestas dadas.

Mi aplicacion va en los 5 mb los cuales tengo imperiosamente que reducir.

en alguna parte han dicho que se saque los packqges, pero si yo desmarco estos de la seccion design, me los elimina del delphi completamente y tengo que instalarlos para otra aplicacion que si los requiere.

lo otro que han dicho es poner los packqges en el runtime, con esto se me hace mas dificil manejarlos ya que no conosco los nombres de los pack y para que se usan.

¿estas son las unicas formas de reducir el tamaño de la aplicacion ?

es correcto lo que entendi o me he equivocado en algo.

en definitiva ¿ como puede reducir el tamaño de la aplicacion?.

efectue una prueba y abri el delphi y genere el ejecutable sin nada solo con lo que se crea cuando crean un proyecto nuevo y el ejecutable que me genero pesa 2,2mb ¿no creen que es demasiado grande si no he puesto ni una coma?.


cualquier luz a mi problema se los agradesco desde ya.

jachguate
12-03-2004, 06:03:38
En que versión de delphi estas trabajando????

Yo he hecho file/new/project, dejando el formulario generado por delphi, compile el proyecto y los tamaños de los ejecutables son:

delphi 4: 277 Kb
delphì 7: 360 Kb

En ninguno de los dos casos he compilado con runtime packages.

se me hace mas dificil manejarlos ya que no conosco los nombres de los pack y para que se usan

Lo único necesario es identificar que packages necesitará tu aplicación para correr. Creo que es vital que vos, que has diseñado la aplicación, conozcas que componentes se han usado en ella, y a partir de alli poder identificarlos. Si no, podes usar, como método de aprendizaje, el de prueba y error (aunque todo está muy bien documentado... pero si no tenes tiempo para investigar o reina el desorden, siempre vale).

en alguna parte han dicho que se saque los packqges, pero si yo desmarco estos de la seccion design, me los elimina del delphi completamente y tengo que instalarlos para otra aplicacion que si los requiere

El tamaño de tu aplicación no tiene ninguna relación con la cantidad de packages o componentes disponibles para el ide de delphi. Tiene que ver únicamente con los utilizados por ella misma. Incluso, un package puede tener 20 componentes, pero si no hay referencias a 15 de ellos a lo largo y ancho de la aplicación, Delphi los excluirá del aplicativo en el proceso de compilación-enlace.

estas son las unicas formas de reducir el tamaño de la aplicacion

Depende. No solo código va en la aplicación... y 5 MB de código parece bastante... alli también van "recursos", hablando en la jerga de windows. Eso significa que si pones un TImage en un formulario, con un Bitmap de 2 MB, pues tu aplicación tendrá que cargar ese peso dentro del ejecutable... es lógico, no?? Algo similar ocurre si pones un RichEdit, y le cargas la constitución de tu pais...

Además, quizas has cambiado la configuración del linker (Project/Options/Linker). Ponele atención especialmente a las opciones en el recuadro EXE and DLL options que tienen relación directa con el tamaño del ejecutable.

en fin... hay mucha tela que cortar, y mientras no aportes mas datos...

Hasta luego.

;)

__cadetill
12-03-2004, 12:26:00
Sólo añadir a la buena explicación del amigo Juan Antonio que, para comprimir exe generados en Delphi, también puedes valerte de utilidades estilo al UPX o AsPack

Gydba
12-03-2004, 12:42:59
Me sumo a lo que dice catedill, lo mejor que he probado es upx. Tiene buena performance y además es extremadamente sencillo de manejar.

Info:
http://upx.sourceforge.net/

Sr_Sombrero
13-03-2004, 05:17:08
Jazz-Upx es una GUI para UPX muy amigable :p

thecid
07-04-2004, 02:26:27
Los compresores/protectores, como el upx, son muy buenos, en especial que te pueden ayudar a reducir tu ejecutable consideradamente, en el internet hya varios compactadores/protectores, esta el armadillo, el shinkler, upx, y varios mas, que la lista es interminable, ademas apoyo a los compañeros que dicen usar compresores, puesto esto tambien te proteje de la ingenieria inversa :D

PabloTech
24-01-2007, 01:00:58
Hola... Muchas cosas de las dichas anteriormente no las he probado pero no dudo de que sean ciertas. Sin embargo, cuando a tu proyecto le agregas componentes (por ejemplo un componente de la clase TRichEdit), en la cláusula "USES" se agregan tambien una lista de unidades que aumentan el tamaño de tu aplicación (por ejemplo las unidades "StdCtrls, ComCtrls"). Contrariamente, si luego quitas esos componentes del proyecto esas unidades que se añadieron no se eliminan de la cláusula "USES" y el tamaño de tu aplicación sigue siendo grande.

Prueba y dime...

Chau...

Pandre
05-02-2007, 06:34:22
100% de acuerdo con los compañeros en cuando a lo de UPX y demás...

Y añadir, que si en la aplicación usas muchas imágenes, por ejemplo, es preferible que los TImageList, TImage, etc. carguen dichas imagenes de archivos y no que estén cargados en dichos componentes, pues eso si que engorda a los .exe.

Otra solución pasa por dividir en módulos la aplicación con DLLs o con Packages al estilo Delphi ;)

Saludos

ixMike
05-02-2007, 20:52:45
Bueno, aquí van mis consejos (mi método de reducir el tamaño del ejecutable):

1. Eliminar del programa cualquier componente que no utilices (chapucillas, elementos decorativos de más, etc). Cuando lo hayas hecho (si tienes que hacerlo) compila.
2. Cierra el programa y ahora vas unidad por unidad dejando la USES solo en "uses Windows, Forms;" o solo "uses Windows;" si esa unidad no tiene Forms. Vuelve a compilar.
3. Como te saldrán muchos errores, empieza a completar la uses con las unidades que te falten. Si no sabes a qué unidad pertenece una función o una constante, puedes mirarlo en la ayuda de Delphi (la seleccionas y pulsas F1).

Estos tres pasos sirven para eliminar las unidades que no necesitas. Otros sistemas para eliminarlas es declarar tus propias constantes o funciones API en tu unidad.

4. Cualquier imagen que aparezca en el programa contenida en un TImage o similar es conveniente que la cargues en ejecución (teniéndola en un archivo a parte) y a poder ser en formato JPEG.
5. Revisa bien tu código. A veces hay cosas que sobran (sobre todo cuando pasas las 1000 líneas de código y has ido haciendo pequeñas modificaciones).
6. Lo de marcar Run Time Packages viene bien si el programa es para ti, pero si es para alguien que no tiene Delphi no conviene marcarlo.

Por último, tras hacer una última compilación, aplicar algún programa de compresión. Yo utilizo UPX, que de los que he probado es el que mejor comprime, y, la verdad, obtengo increíbles resultados.

Bueno, estos pasos son consejos, es posible que alguno no te convenga o que no esté completo.

Por favor, que alguien complete la lista (seguro que se me escapa algo).

Espero que esto sirva de ayuda a todos.

Cordiales saludos. ;)

mia
06-02-2007, 16:09:05
AsPack... sin lugar a dudas... de 8MB a 1,5MB. Sin palabras....

saludos...

Lepe
06-02-2007, 16:49:31
Estos tres pasos sirven para eliminar las unidades que no necesitas.

También existe cnpack (open source y freeware) que ya lo hace.

4. Cualquier imagen que aparezca en el programa contenida en un TImage o similar es conveniente que la cargues en ejecución (teniéndola en un archivo a parte) y a poder ser en formato JPEG.


Casi mejor dejarla en el ejecutable:
- Al trasladar tu programa, también necesitaras llevar las imágenes... así que el tamaño es el mismo.
- Los usuario son muy hábiles con los jpg y otros formatos cambiando el contenido del mismo... normalmente por fotos indecentes ;).

El uso de un TImageList en un módulo de datos es muy recomendable, ya que la misma imagen puede compartirse en 10 ventanas, pero solo engorda el ejecutable una sola vez. Dicho de otra forma.... "nada de usar la propiedad Glyph de los botones.

Saludos

edelphi
06-02-2007, 23:02:33
y como puedo crear un modulo de imagenes para que solo se carguen una sola vez en mi aplicacion??

Lepe
07-02-2007, 10:47:18
File -> New -> TDatamodule

No recuerdo exactamente en que ficha está, buscalo un poco. Después añades el TImageList y añades las imágenes.

Cuando usas un SpeedButton, deberás añadir el "Uses datamodule1" para poder seleccionar el TimageList y su ImageIndex.

Otra cosa que suelo hacer es añadir los iconos en el imagelist y en tiempo de ejecución, (en el Oncreate de la forma) lo asigno a su propiedad Icon, ya que normalmente si reutilizo esa imagen.

Saludos

ixMike
07-02-2007, 20:47:14
- Los usuario son muy hábiles con los jpg y otros formatos cambiando el contenido del mismo... normalmente por fotos indecentes ;).


Te remito al truco 550 (http://www.q3.nu/trucomania/truco.cgi?550&esp) de Trucomanía

y en cuanto a lo de dejarlas dentro, depende: si tu programa es un solo ejecutable, pues mejor que sí, que las dejes dentro, pero si lo acompañan muchos archivos (de configuración, DLLs, etc) pues las imágenes pueden ir fuera del ejecutable.

Saludos