¿Por qué los programas en Delphi pesan tanto?
Hice un programa de 'hola mundo' en Delphi consola y pesa 1.163 KB, en Visual BASIC el hola mundo no pesa tanto. Eso me pasa en la versión de prueba de Delphi Berlin y en Lazarus. No sé si las aplicaciones visuales pesen así con Delphi. Saludos
|
1.163 KB no es "pesar mucho".
La diferencia entre lenguajes esta en cuanto del codigo referencia dinamicamente y cuanto estaticamente. VB no "pesa" tanto porque depende de un runtime/librerias (.net) que es donde esta el "peso". Delphi por el contrario, incorpora el "runtime/librerias" estaticamente y por eso parece mas pesado. |
Cita:
|
Buenas,
otro factor importante es envia ese ejecutable a alguien y funcionara, el de VB sino tiene todas las librerias que requiere no se podra ejecutar. |
Cita:
|
DX10.1 Berlin automáticamente adjunta skin Win10 o el Sistema operativo que estas utilizando por ello pesa así su ejecutable.
prueba en diferentes SO veras q se adapta a cada uno. en visualbasic si no lo colocas un skin la aplicación parece windows 98 yo tengo una aplicación DX10.1 que lo compila en 37Mb y utilizo compresor upx y lo comprime a 3.5Mb una belleza, y lo mejor el ejecutable no depende de OCX o DLL como VisualBasic. |
|
Por supuesto y a ojos cerrados, Delphi, Delphi, Delphi, Delphi, Delphi, Delphi, Delphi, Delphi, Delphi, Delphi, :D:D:D
|
Cita:
Gracias |
Cita:
|
Hola,
Cita:
P.D. Si lo que se busca son archivos ejecutables realmente pequeños en Delphi, había por ahí un proyecto de nombre "KOL Magic Library" que existía al menos hasta para Delphi 7. Usando dichas librerías en lugar de la VCL de Delphi, los ejecutables obtenidos eran sorprendentemente pequeños. |
avmm2004 Yo utilizo UPX hasta la fecha es bueno me comprime y no es lento la aplicación,
dec como comprimes en el ejecutable de 19Mb para q termina en algo menos? como lo haces con Inno Setup ? how to ... |
Hola,
Cita:
|
Cita:
¿O cuánto consideras que debería "pesar" el 'Hola, mundo!' más poderoso que hayas programado hasta el momento? |
De todos modos, podes generar un ejecutable que no incluya todas las dependencias, y distribuir las dependencias y el binario final por separado; entonces quedaria un ejecutable notablemente mas chico pero que necesitará de los bpl / dll necesarios para poder funcionar. Busca por los foros carga dinamica de paquetes
|
Y ya que estamos,
tambien suele ocurrir al hacer unos proyectos sobresimensionados como un HOla Mundo, cae uno en la tentacion de probar varios VLC, que al final no usamos y los borramos del diseño, pero no borramos la libreria de la unit y nos quedan uno residuos estupendos, como cuando usamos Jedi, Devexpres, que directamente te meten unas 10 units a escondidas :) y facilemten te pesa el hola mundo mas de 20 mb |
Definitivamente. Igual, yo ya me acostumbré a eliminar todas las unit que no hacen falta, incluso si es una de las de Delphi estándar
|
Gracias por sus respuestas, el apoyo que se obtiene en las comunidades de desarrolladores en un lenguaje de programación también es un plus. Saludos
|
Cita:
Cita:
Ese es el comportamiento por defecto desde D6 y D7 y debiera seguir siéndolo en las nuevas versiones. Saludos, |
La verdad no lo he probado. Realmente si elimino unidades del uses no es para ahorar kilobytes :D
Aun asi, hay que tener cuidado con las unit que tienen "initialziation" y "finalization". Yo en alguna unit se que uso un "viejo truco":
Eso lo hago para registrar alguna cosa en algun lado, por ejemplo, como cuando se registran las clases de graficos (distintos formatos de imagenes) o lo mismo para archivos multimedia |
Y considerar que los constructores y destructores de clase vienen a ser, para muchas nuevas bibliotecas, una mejor alternativa que las tradicionales secciones Initialization y Finalization. Estas últimas, opcionales al final de las unidades .pas, sí que hacen que el programa ejecutable pese y haga más cosas de las que vemos a simple vista.
Ojo, pues. |
Cita:
Ahora, sólo por ponerla, no hace nada (hagamos de cuenta que no hay inicialización ni finalización). Hagamos de cuenta que del centenar de procedimientos tienes contemplado usar apenas unas decenas. Justamente en la aplicación se incorporan solamente lo que se invoca. Y el compilador es inteligente. Si no se usa nada, no lo pone. Lazarus es igual, aunque en esto es un poco más vivo: te informa de las unidades que no se están usando. De todas formas, se puede hacer una "limpieza" al borrar los archivos temporales que genera Delphi y forzar de esa forma una nueva construcción. Saludos, |
Totalmente de acuerdo con lo que decis; pero vuelvo a remarcar que a mi no me interesa mucho el ahorro de bytes en el binario final sino el concepto (impacto que tiene en el diseño) el tener un uses que sobra
Cita:
Cita:
Con un codigo de aplicacion de consola vacio (un simple Readln para que no se cierre), aunque este la unit3 en el uses, los constructor/destructor de clase no se ejecutan. Pero, si hago esto si:
Esto se ejecuta siempre
|
Claro está, Agustín. Por eso en muchos casos resultan mejores los constructores y destructores de clase (quizá debí intentar explicarlo tan bien como tú). :)
Marcelo: interesante lo que hace Lazarus. Me pregunto por qué Delphi se ha demorado tanto en agregar algo tan útil (de forma nativa). Saludos óptimos. |
Lazarus lo informa por medio de un hint o warning... no recuerdo bien. Estoy en mi cama con el celular y durmiendome como para verlo ahora.
Lo que si puedo decir es que tal funcionalidad puede que venga de la mano con el hecho de que por defecto Lazarus almacena info de debug. A medida que uno pone y saca cosas el ejecutable gana en tamaño, aún cuando hace linkeo inteligente se le queda basura y hay que borrarsela. Para eso se le configura al poyecto y se indica que no genere debug info. Delphi en esto es diferente. No se queda con la basura. Solo se queda con los ultimos cambios. Pueden ver esto en accion con la generacion de los archivos de compilacion temporales. Delphi detecta cuando cambia algo, y debe regerenarlos. Desconozco por que no han puesto esta caracteristica, o si la pusieron tarde. Saludos Saludos |
Cita:
|
Eso deberíamos hacer todos Al.
Pero es difícil evitar la tentación. Yo lo tengo por despertador y emergencias. Lo que si hago es dejarlo a una distancia prudenciable... cosa que al sonar la alarma me levante para apagarlo :D Saludos, nuevamente con el celu y listo para dormir. |
Yo siempre lo apago, no quiero saber nada de emergencias, y menos todavía si la emergencia es a las 5 AM y algo así como: "Heriberto, que estamos esperándote abajo. Aquí no vive ningún Heriberto.
|
Cita:
Saludos :) |
Cita:
|
La franja horaria es GMT +2. Ahora son las 08:54:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi