Quels sont les meilleurs moyens d'accélérer le temps de compilation dans Visual Studio 2005 pour une solution contenant principalement des projets C ++? P>
9 Réponses :
Les en-têtes précompilés peuvent être utiles si vous incluez des en-têtes complexes (STL, Boost, par exemple) directement dans beaucoup de fichiers. P>
Assurez-vous que votre construction n'accède pas au réseau par inadvertance ou intentionnellement. P>
Vous pouvez créer un en-tête pré-compilé des fichiers qui ne changeront normalement pas fréquemment. Cela peut augmenter considérablement votre temps de compilation. P>
Je n'ai jamais remarqué cela quand j'ai commencé à utiliser Visual Studio. Je suis passé de code :: des blocs qui semblent le faire automatiquement pour vous.
Outre en plus des en-têtes avant compilation, il existe un nombre d'autres choses qui pourraient vous ralentir: P>
Si vous ne voulez pas désactiver complètement la vérification des virus, de nombreux scanners vous permettent de spécifier des exceptions. Ajouter *. C, * .cpp, * .h * .hpp, * .OBJ, * .lib, * .pch, * .ncb code> à la liste d'exceptions vous obtient 95% du speedUp, et attrape toujours tous les virus communs.
Les actions réseau sont un énorme goulot d'étranglement. Mon temps de construction est passé de ~ 1 minute (pour un projet de démonstration d'un code trivial de code) à environ 1 seconde lorsque je suis passé de notre part de réseau à mon SSD local.
Si vous avez la CPU multicœur, utilisez / MP COMPILER OPTION . P>
EDIT: P>
J'utilise g ++, donc je ne suis pas sûr, mais aussi loin que je sais que VS2005 prend également en charge cette option, mais elle est sans papiers.
Je crois que VS2005 prend en charge / député, mais il est sans papiers.
VS2005 effectuera déjà des compilations simultanées sur les machines MP, dans les contraintes des dépendances du projet.
Si vous avez beaucoup de projets dans la solution, supprimez-les d'entre eux. S'ils sont référencés en tant que projets, vous pouvez plutôt faire référence à la sortie binaire (utilisez le bouton Parcourir dans la boîte de dialogue Ajouter une référence). Cela supprime beaucoup de contrôle de dépendance dans la solution. Ce n'est pas idéal mais il accélère les choses. P>
#include code> de fichiers d'en-tête). li>
- minimiser la quantité de code de modèle. LI>
ul>
Au niveau du code, il est utile de minimiser la quantité d'en-têtes incluse par d'autres en-têtes. Les fichiers de chargement et de lecture répétés peuvent avoir un impact important. Au lieu de cela, avancez les choses dans la mesure du possible. Par exemple:
#include <iosfwd> #include <string> #include "M.h" #include "R2.h" #include "A2.h" class M2; class A; class R; template<class C> class T; class X{ M member; // definition of M is required M2 *member2; // forward declaration is sufficient for pointers & references public: // forward declaration of argument type A is sufficient X(const A &arg); // definition required for most std templates and specializations X(const std::string &arg); // forward declaration of your own templates is usually okay... void f(T<int> t); // unless you're defining a new one. The complete definition // must be present in the header template<class Z> void whatever(){ // blah blah } R f(); // forward declaration of return type R is sufficient // definitions of instantiated types R2 and A2 are required R2 g(A2 arg){ return arg.h(); } // ostream is forward-declared in iosfwd friend std::ostream &operator << (std::ostream &o, const X &x); };
La solution que nous avons utilisée était Incredibuild . Il suffit de lancer plus de matériel au problème. En plus de toutes les machines de développement (assez puissantes), nous avons eu un certain nombre de serveurs 4 cœurs qui ne font que compiler. P>
Changer votre plate-forme de solution sur "Toute processeur" donnée sur le haut de Visual STDIO, la vitesse de construction de votre programme sera définitivement augmentée. P>