2009-05-22 8 views
24

Tengo algunos proyectos grandes (~ 600k líneas de código) Delphi. Incluyen algunos componentes personalizados que nuestro equipo ha desarrollado.rendimiento de finalización del código Delphi

A menudo, cuando invoco la finalización del código con ctrl + espacio o simplemente pulsando ".", El IDE se bloquea y piensa muy duro durante mucho tiempo. A veces, la demora puede ser de un minuto completo o más. Otras veces, aparece de inmediato con sugerencias.

¿Qué factores influyen en el rendimiento de intellisense en Delphi? ¿Hay alguna forma de que pueda mejorar este rendimiento?

Mi mejor solución hasta el momento es apagar la terminación automática, y usar ctrl + espacio cuando necesito meditar en silencio por un minuto más o menos.

No puedo evitar mencionar que VS2005, VS2008 y XCode parecen dar una respuesta intellisense prácticamente instantánea (aunque nunca lo he probado en un proyecto tan grande).

Como alternativa, I've offered this suggestion.

+0

esto me interesa mucho. Recuerdo que el. o Ctrl + Space solía funcionar perfectamente bien hace varios años. Creo que fue Delphi 7, ciertamente Delphi 5, en el cual el retraso era difícilmente discernible. Me encantó. Pero luego apareció el D2005 y fue cuando tuve terribles problemas con esta función. ¿Qué cambió? ¿Porque lo han cambiado? –

+2

Buena pregunta.Se me hizo casi inutilizable en proyectos de mayor envergadura, a regañadientes lo apagué y es una lástima porque la ayuda en línea es pequeña, molesta e incómoda, por lo general, es más rápido/directo pedir ayuda a Google con toda honestidad. Me encantaría poder usar Ctrl-Space nuevamente, fue muy útil. – robsoft

Respuesta

7

Asegúrese de incluir explícitamente todas las unidades (*) utilizadas por su proyecto en el dpr.
No confíe en la ruta de búsqueda para encontrar una unidad llamada desde otra unidad, agréguelo al dpr. El dpr será mucho más largo, pero todas las cosas relacionadas con la compilación serán más rápidas, incluida la información del código.

(*) no las unidades de los componentes instalados.

+0

Esto realmente parece ayudar un poco ... ctrl + f12 muestra una lista antiestética de unidades que no son específicas del proyecto ... pero puedo vivir con eso. – JosephStyons

+1

Además de las rutas de búsqueda dentro del proyecto, los otros terribles retrasos aparecen si tiene un camino de biblioteca gigante. –

+0

Lo que me ayudó mucho en el caso similar: ** eliminar unidades no utilizadas ** de las secciones "usos" y mover unidades siempre que sea posible de "interfaz" a "implementación". El tiempo de compilación del proyecto 346kLoc bajó de 70 segundos a 8.8 segundos. Esto influyó directamente en la finalización del código. Ahora es casi instantáneo. – Kromster

3

Este es un problema de larga data con Delphi, y tuve que recurrir a desactivar la finalización automática. Después de trabajar de esa manera por un tiempo, estaba muy feliz con eso. Incluso si solo lleva una fracción de segundo, tener el IDE retrasado en mi tipeo fue desconcertante e interrumpió mi flujo. Mucho mejor con las funciones automáticas desactivadas, IMO.

+0

no puedo estar de acuerdo con no usar 'the automics' ... –

+1

MasterPeter: cada uno por su cuenta, me temo. Cuando sé lo que quiero, me resulta mucho más rápido escribirlo que tener una pausa y luego elegir. Cuando no sé lo que quiero, ciertamente lo sé, y soy perfectamente capaz de escribir Ctrl + Espacio para obtener ayuda. – dwc

+0

En pequeños proyectos, he encontrado que es excelente; Una vez que aprendo cómo funciona, puedo usar las plantillas de código y la autocompletación con gran ventaja. Eso hace que el pobre desempeño en un proyecto grande sea aún más frustrante. – JosephStyons

14

Delphi Code Insight invoca el compilador dll para hacer una compilación personalizada cuando el usuario solicita Code Insight (Ctrl + Espacio, '.', Etc.). Esta compilación personalizada realiza una compilación en la unidad y omite codegen, linking, etc. hasta que alcanza su desplazamiento actual en el buffer de archivos. Teniendo esto en cuenta, la lista de unidades que ve el compilador antes de llegar a su posición actual tendrá un gran factor a la hora de determinar la velocidad de la operación Code Insight. Puede haber una unidad (o unidades múltiples) que está causando una fuerte dependencia del sistema de archivos, etc. Es muy posible que reordenar la cláusula uses, refactorizar la cláusula uses para estar en varios archivos o eliminar unidades en la cláusula uses que aren ' Es necesario que su unidad actual compile para mejorar el rendimiento. Además, usar paquetes o acortar la ruta de búsqueda de su unidad puede mejorar el tiempo de respuesta de CI.

+1

¡Interesante respuesta, gracias! Algo de comida allí. :-) – robsoft

+1

Eso es realmente interesante ... pero debo señalar que un FULL BUILD de la aplicación (con nuestro famoso y rápido compilador, yay) tarda aproximadamente 1 minuto ... y he tenido la finalización del código tomar más tiempo que eso . – JosephStyons

+0

Si realiza una reconstrucción completa (que genera .dcus en el disco) ¿eso ayuda al rendimiento de CI? Además, ¿usa paquetes o es un .exe monolítico? –

4

No sé cuál es la versión que está utilizando, pero mucho más rápido finalización de código es una de las cosas que más me gustan de Delphi 2009.

+0

Eso es bueno saber. Actualmente estoy en d2007 – JosephStyons

0

¿Se incluyen los directorios de fuentes para sus equipos de componentes personalizados para estar en la ruta de la biblioteca? Sería interesante ver la diferencia de velocidad si solo los archivos DCU componentes están en la ruta de la biblioteca, en lugar de tener los archivos fuente allí también.

+0

Sí, las rutas de origen para los componentes personalizados están ahí. Volveré a probar el enfoque dcu-only – JosephStyons

+0

Intenté solo las rutas DCU, y no pareció cambiar el rendimiento de intellisense. – JosephStyons

0

Acabo de encontrarme con este problema, lo solucioné eliminando un enlace de red muerto de la ruta de mi biblioteca de entorno. Resolvió mi problema al 100%.

Cuestiones relacionadas