Estoy trabajando en un gran proyecto delphi 6 con bastantes dependencias. Lleva varios minutos compilar todo el proyecto. La recompilación después de unos pocos cambios a veces es mucho más larga para que sea más rápido terminar Delphi, borrar todos los archivos dcu y volver a compilar todo.Delphi: ¿Cómo organizar el código fuente para aumentar el rendimiento del compilador?
¿Alguien sabe una manera de identificar, qué hace que el compilador sea más lento y más lento? ¿Algún consejo sobre cómo organizar el código para mejorar el rendimiento del compilador?
ya he probado siguientes cosas:
- explícitamente incluyen la mayoría de las unidades en el DPR lugar de depender de la ruta de búsqueda: No mejoró nada.
- Usa el compilador de línea de comandos dcc32: no es más rápido.
- Intenta ver lo que hace el compilador (usando ProcessExplorer desde SysInternals): aparentemente ejecuta la mayor parte del tiempo una función llamada 'KibitzGetOverloads'. Pero no puedo hacer nada con esta información ...
EDITAR, Resumen de las respuestas hasta ahora:
La respuesta que mejor funcionó en mi caso:
- El función "Limpiar referencias de unidades no utilizadas" de cnpack. Limpió casi automáticamente más de 1000 referencias, haciendo una compilación "fría" aproximadamente dos veces más rápida. (compilación "fría" = borrar todos los archivos dcu antes de compilar). Obtiene la lista de referencia del compilador. Entonces, si tiene un {$ IFDEF}, verifique que todas sus configuraciones aún se compilan.
La siguiente cosa que le gustaría probar:
- Refactorizando las referencias de unidades manualmente (con el tiempo utilizando una clase abstracta) pero es mucho más trabajo, ya que primero se debe identificar en el que el los problemas son Algunas herramientas que pueden ayudar:
- GExperts añade un navegador dependencias del proyecto para el IDE de Delphi (pero por desgracia, no se puede mostrar el tamaño de cada rama)
- Delphi Unit Dependency Viewer V1.0 hacer de lo mismo pero sin Delphi. Puede calcular algunas estadísticas simples (¿Qué unidades es la más referenciada, ...)
- Icarus que se hace referencia en a link en una de las respuestas.
cosas que no cambiaron nada en mi caso:
- Poner todos los archivos de mi programa y todos los componentes en una carpeta sin subcarpetas.
- Desfragmentando el disco (probé con un ramdisk)
- Usando un ramdisk para el código fuente y las carpetas de salida.
- Apagar el antivirus de detección en vivo
- Enumerar todas las unidades en el archivo dpr en lugar de confiar en la ruta de búsqueda.
- Usando el compilador de línea de comandos dcc32 o ecc32.
cosas que no se aplican a mi caso:
- evitando tener dependencias de recursos compartidos de red.
- Usando DelphiSpeedUp, porque ya lo tenía.
- El uso de una sola carpeta para todos los DCU (siempre lo hago)
cosas que no lo probé:
- La actualización a otra versión de Delphi.
- Usando dcc32speed.exe
- Utilizando una unidad de estado sólido (no lo probé, pero probé con un ramdisk donde puse todo el código fuente. Pero tal vez debería haber instalado Delphi también en el ramdisk)
Acerca de su problema de $ IFDEF, debe adjuntar las unidades utilizadas con el propio $ IFDEF para aliviar el problema de CnPack eliminándolas por no ser utilizadas. –
@Lieven: buena idea para encerrar a toda la unidad con el $ IFDEf adecuado. Pero no siempre es posible: si la unidad es parte de una biblioteca que no desea cambiar, está obligado a poner $ IFDEF en los "Usos". – Name