37 votes

Pourquoi la vitesse de compilation de Delphi diminue-t-elle plus elle est ouverte, et que puis-je faire à ce sujet?

Mon entreprise a été l'exécution d'un grand projet sur Delphi depuis plus d'une décennie. Notre base de code a été croissant au cours des années et se situe aujourd'hui autour de 4 millions de lignes de code. Vitesse de Compilation est en train de devenir un problème. Nous avons passé du temps à extirper de l'unité de la circulaire référencement (une cause connue de la lenteur de la compilation) et a examiné tous les aspects de l'installation. Il arrive à un moment on ne peut pas l'améliorer tout autre matériel, avec ce que nous pouvons contrôler.

Pour l'instant, sur un état de l'art PC avec 4 cœurs de l'exécution de Windows XP SP3 et Delphi 2006, début Delphi frais et faire une version complète, il faut ~40 secondes. Alors, si nous faisons une autre construction complète de la même Delphi session immédiatement, il faudra 1m 40. Faire un autre plein de construire à nouveau, elle va empirer. Ainsi de suite et ainsi de suite.

(Nous sommes bien conscients de Windows lui-même met en cache des fichiers et cela a un grand impact sur la vitesse de compilation. Les chiffres ci-dessus sont basées sur des que les fichiers sont mis en cache. Nous avons mis en place un tel scénario en obtenant Delphi pour compiler le projet une fois, fin et puis commencer une nouvelle Delphi session. Ainsi, alors que 40 secondes ne voit pas d'être lent, c'est uniquement parce que les fichiers sont mis en cache par Windows. Et nous faisons cela afin d'avoir une pomme à la pomme de comparaison.)

Ce puzzles nous est pourquoi la vitesse de compilation est pas le pire. (Nous avons observé dans le passé, le ralentissement a été pire si le projet avait beaucoup d'unité circulaire référencement.) Si nous mettons fin à Delphes et à démarrer une nouvelle session, le temps de compilation de revenir à 40 secondes. Encore plus intéressant que nous venons d'observer, nous pouvons atteindre la même vitesse "amélioration" en cliquant sur le bouton "Annuler" pour annuler la compilation et ensuite faire le plein de construire tout de suite. Le temps de Compilation de revenir à 40secs trop.

Il nous semble Delphi propre cache de l'unité de la dépendance n'est pas aussi efficace que de les construire à partir de zéro, et elle s'aggrave au fil du temps. Et il apparaît également le bouton Annuler en quelque sorte efface ce cache. Ce que nous pensons que si nous pouvons puiser dans le Delphi IDE sous-système qui n'cette compensation, on peut toujours conserver la vitesse de compilation à ses performances de pointe. Mais nous ne savons pas comment.

Personne ne sait ce que nous pouvons faire?

Nous sommes toujours à l'aide de Delphi 2006 que nous n'avons pas encore trouvé un moyen de port de notre grand projet de l'Unicode. J'ai lu sur des forums que la dernière Delphi XE présente les mêmes vitesse de compilation problème avec l'unité de la circulaire référencement. Quelqu'un sait si Delphi XE a abordé le problème?

p.s. Nous sommes également conscients que la subdivision du projet en packages d'exécution peut réduire le temps de compilation. Mais pour le déploiement et des raisons administratives, nous essayons d'éviter d'utiliser des packages d'exécution.

23voto

Arnaud Bouchez Points 25855

Si vous construisez votre application, voici quelques astuces pour accélérer le processus:

  • Effacer tous *.dcu avant de la construire (del *.dcu /s);
  • Exécuter une bonne défragmentation de votre disque dur;
  • Mettre la plupart de vos fichiers source dans le même répertoire, et essayez de quitter l'IDE et le Projet de la bibliothèque des chemins aussi court que possible, avec le plus d'entrées utilisées en premier;
  • Installer DelphiSpeedUp.

Delphi 2007, devrait compiler plus vite que Delphi 2006.

Delphi 2009/2010/XE serait probablement plus lent: de l'expérience utilisateur, la mise en œuvre de génériques et de nouvelles RTTI fait le processus de compilation de plus en plus complexe, et la mise en œuvre effective a été trouvé à être plus lente, par exemple, qu'avec Delphi 2007.

Mise à jour:

Avez-vous essayez d'activer la ProjectClearUnitCacheItem menu caché entrée?

Clear Unit Cache entry

J'ai cette entrée activée soit par le CnPack, soit par DDevExtension (je ne sais pas lequel ce faire, probablement le plus tard). Cela pourrait être utilisé pour nettoyer l'intérieur de l'unité de cache.

18voto

Mason Wheeler Points 52022

La dégradation progressive des performances pourrait être dû à une sorte de fuite de mémoire ou autre bug dans le compilateur. Le ciel sait D2005 et D2006 avait assez d'eux! Si vous ne pouvez pas mettre à niveau vers une Unicode version de Delphi, vous devriez au moins mise à jour D2007 (qui je crois est toujours disponible à partir de Embarcadero) pour une meilleure stabilité.

Aussi, comme Robert Frank a mentionné dans un commentaire, découvrez Andreas Hausladen outils. Juste il ya quelques jours il a sorti un patch qui améliore la vitesse de compilation un peu. Malheureusement, cette spécificité est apparemment seulement pour D2009 et, plus tard, mais beaucoup de ses correctifs de contribuer à l'accélération de diverses choses, y compris le compilateur.

7voto

David Heffernan Points 292687

Cela vaut la peine d’essayer DelphiSpeedUp d’Andreas Hausladen, mais cela ne fera qu’aider à la performance IDE plutôt qu’à la compilation telle que je la comprends.

L’autre idée que personne n’a encore suggérée est d’utiliser des disques à l’état solide haute spécification.

Je recommande l'utilisation de Windows 7 64 bits avec une grande quantité de RAM pour optimiser les performances de la mise en cache des fichiers.

Juste être reconnaissant que votre projet n'est pas écrit en C ++!

1voto

David Robb Points 11

Envisager de construire avec les packages d'exécution dans la maison, puis la construction monolithique exécutables lors de l'envoi d'un code à un service d'assurance qualité ou de la distribution de votre application.

Il faut en plus de l'entretien, mais la hausse spectaculaire des temps de compilation sont la peine de l'OMI.

Nous avons un 2.4 MLOC projet avec environ 40-50 plus petits, à l'appui des demandes. Lors de la compilation à l'encontre d'un groupe de packages d'exécution du projet se construit dans environ 500 lignes et construit environ 6 fois plus rapide (15 secondes vs 90 secondes). Un grand nombre de petites applications de compiler en une seconde ou moins, car une grande partie de la emballés code est partagé.

Vous devez être sûr de tester la monolithique exécutable, pas le package exécutable. Mais en général, vous ne devriez pas voir de trop nombreuses différences de comportement si vous suivez les bonnes pratiques de codage.

0voto

none Points 1370

Avez-vous essayé de compiler le code à l'aide d'une ligne de commande de script?

La recompilation à partir de la ligne de commande a-t-elle rendu le processus actif pendant 40 secondes?

lancez à partir de cmd "dcc32.exe" pour voir l'utilisation.

Mise à jour: Je ne peux pas le vérifier maintenant, cependant vous devriez essayer de compiler en ligne de commande et voir si vous essayez de courir à partir de l'ide, l'ide ne devrait pas être recompilé et vous permettre de lancer le débogage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X