2009-12-14 12 views
9

Tengo una pregunta acerca de la opción en Delphi para construir con o sin paquetes de tiempo de ejecución (Proyecto-> Opción-> Paquetes).
El tamaño del archivo ejecutable parecen ser más pequeño (389KB) cuando comprobé el cuadro de "Construir con paquetes de tiempo de ejecución", en comparación a cuando desactive la casilla (3,521KB). ¿Por qué es ese el caso?¿Por qué construir con paquetes de tiempo de ejecución hace que el archivo EXE sea más pequeño?

Tengo tanto problema construyendo un disco de instalación para él y no puedo entender qué archivos deben incluirse en la instalación. Me pregunto si esto podría tener algo que ver con eso, pero ya he probado ambas opciones.

+1

Tengo curiosidad por esto también. Uso EurekaLog, y su capacidad de pérdida de memoria no funciona a menos que compile sin paquetes de tiempo de ejecución. Así que pasé unos días eliminando la necesidad de hacerlo. Entonces, para agregar a su pregunta, también me interesa si vale la pena construir paquetes de tiempo de ejecución WITH para una compilación de depuración, y WITHOUT for a build, y si es así, ¿cómo se puede hacer eso? – lkessler

Respuesta

14

Al compilar con paquetes de tiempo de ejecución, VCL y RTL se cargan desde los paquetes y, por lo tanto, su código no tiene que estar vinculado a su EXE. Por lo tanto, el EXE se hace más pequeño, pero la instalación total se agranda ya que no puede usar enlaces inteligentes para reducir el tamaño de los paquetes.

Como ya habrás notado, el uso de paquetes causa problemas para el seguimiento de fugas de memoria y también causa problemas para la depuración. Por lo general, solo vale la pena usarlos si está utilizando complementos que también necesitarán paquetes de tiempo de ejecución.

+5

También es beneficioso si va a ejecutar muchas aplicaciones diferentes en una máquina que utiliza VCL, no tiene sentido cargarla en la memoria varias veces. –

+1

+1 E incluso en el secenario donde los complementos pueden necesitarlos, casi siempre es mejor diseñarlos para no requerir paquetes de tiempo de ejecución. Debido a que esos complementos se romperán todos cuando construyas la aplicación en una versión más nueva de Delphi, por ejemplo: nunca podrías actualizar a herramientas más nuevas, y los autores de los complementos no podrían hacerlo también. –

+1

Excepto que con gigabytes de memoria RAM en la mayoría de los PC, el problema de problemas de versiones y la idea de que una BPL en falso podría ser cargado desde algún lugar de mi camino (DLL infierno == BPL infierno) mantener una gran cantidad de personas de cada vez que deseen utilizar tales una tecnología en práctica. La capacidad de ejecutar completamente "de lado a lado" sería genial, si se pudiera confiar en que los BPL solo se cargarían localmente, y se ignoraría el entorno PATH del sistema. –

0

No se conoce acerca de D2010, pero en D2006 hay una opción en el menú del proyecto llamada "Información para ProjectName".

Esto le mostrará qué paquetes se incluyen después de compilar.

Sin embargo, como Mason ha declarado, hay pocas ventajas al usar paquetes de tiempo de ejecución, y bastantes desventajas.

9

Las respuestas hasta ahora pasan por alto un punto crucial: los paquetes de tiempo de ejecución son útiles de la misma manera que los archivos DLL son útiles si tiene un conjunto de aplicaciones que funcionan juntas y se instalan juntas. Se podría, por supuesto vincular las bibliotecas VCL y de terceros en todos ellos mediante la construcción de ellos sin paquetes, pero dependiendo del número de aplicaciones y librerías utilizadas el tamaño de estas aplicaciones combinadas será más grande que el tamaño de ellos construidos con paquetes de tiempo de ejecución más el tamaño de esos paquetes de tiempo de ejecución. Esto hará que los paquetes de instalación sean más grandes, lo cual no es el gran problema que alguna vez fue.

Pero al usar todas estas aplicaciones al mismo tiempo, también traen una carga mucho más alta para el sistema. Como cada aplicación utiliza su propia copia de la VCL y de las otras bibliotecas, todas deben cargarse desde el disco en la memoria, lo que causa más E/S. Y luego habrá varias copias de ellos en la memoria, cada uno ocupando espacio para el código. Cuando se utilizan paquetes de tiempo de ejecución, cada aplicación tendrá su propia área de memoria para los datos, pero todos compartirán la misma copia del código de los paquetes en la memoria.

para una sola aplicación autónoma y sin duda alguna necesidad especial construir sin paquetes.

+0

¿Cuánta de las 4 GB de memoria típica está ocupada? De todos modos, todavía se aplica algo, porque el caché también es memoria, y bastante costoso. Aún así, creo que es más un caso teórico, ya que no todas las páginas del RTL/VCL también estarán activas. –

+1

Bueno, llámame anticuado, pero tener suficiente memoria no es razón suficiente para desperdiciarlo. Ese tipo de pensamiento nos ha traído el lamentable estado del software que tenemos hoy. Mi equipo actual tiene 4000 veces la memoria RAM y 20000 veces el espacio del disco duro en comparación con mi primer PC, sin embargo, se siente como la mayoría de todos estos recursos adicionales se desperdician ... – mghie

+0

Vengo de Química originalmente, y no hay sustituto para medir y un sentimiento por magnitudes. Ese sentido es más fuerte que la reacción de "pérdida" de kneejerk. –

1

Una de las razones principales para usar paquetes de tiempo de ejecución es cuando necesita la granularidad de módulos para implementar/actualizar en un medio que no acepta archivos grandes y grandes, como un cable con un ancho de banda bajo.

Debido a que los paquetes de tiempo de ejecución siguen siendo los mismos hasta que cambie su versión de Delphi - como siempre para los que siguen en D7 ;-) - que permite desplegar nuevas versiones o nuevas aplicaciones sin la carga útil de la RTL/VCL.

Pero al igual que con los archivos DLL, usted tiene que tener cuidado con el control de versiones.

+0

¿Significa que si "Construido con paquetes de tiempo de ejecución" tengo que enviar los paquetes por separado? Lo siento si esta es una pregunta estúpida. – Snackmoore

+1

Debe enviar los paquetes con su aplicación, y tenga mucho cuidado al instalarlos para no sobrescribir la versión más nueva (los paquetes de actualización también pueden actualizarla). Se recomienda un buen instalador que verifique las versiones correctamente. –

+1

snackmoore, la mayoría de los desarrolladores de Delphi nunca construirían con paquetes de tiempo de ejecución en una compilación final que se envía a los clientes, a menos que también quieran hacer su propio trabajo más difícil. Los paquetes BPL solo hacen la vida más difícil para ti, a menos que realmente los necesites por alguna razón (las otras respuestas te dicen por qué podrías necesitarlos), entonces no lo necesitas, así que déjalo. –

3

cuanto a su pregunta "¿qué archivos deben ser incluidos en la instalación": se puede usar Dependency Walker de localizar a las dependencias de bibliotecas.

Cuestiones relacionadas