Utilisation de plusieurs processeurs pour générer des projets

Mise à jour : novembre 2007

Visual Studio 2008 peut exploiter les systèmes à plusieurs processeurs. Un processus de génération séparé est créé pour chaque processeur disponible. Par exemple, pour un système doté de quatre processeurs, quatre processus de génération sont créés. MSBuild peut traiter simultanément ces générations pour réduire la durée globale de génération. Toutefois, la génération parallèle introduit des modifications dans le déroulement du processus de génération. Cette rubrique aborde ces modifications.

Références entre projets

Lorsque le Microsoft Build Engine rencontre une référence projet-à-projet (P2P) en exécutant des générations parallèles pour construire un projet, il génère la référence une seule fois. Si deux projets ont la même référence P2P, elle n'est pas régénérée pour chaque projet. À la place, le moteur de génération retourne la même référence P2P aux deux projets qui en dépendent. Les futures demandes de la session concernant la même cible auront la même référence P2P.

Détection de cycle

La détection de cycle fonctionne de la même manière que dans MSBuild 2.0, mais MSBuild est désormais en mesure de signaler la détection de cycle pendant la génération ou à un autre moment.

Erreurs et exceptions pendant les générations parallèles

Au cours des générations parallèles, des erreurs et exceptions peuvent se produire à d'autres moments que pendant les générations non parallèles et, lorsque la génération d'un projet échoue, les autres générations de projet continuent. MSBuild n'arrête pas la génération d'un projet construit parallèlement à celui qui a échoué. La génération des autres projets se poursuit jusqu'à ce qu'elle aboutisse ou qu'elle échoue. Toutefois, si ContinueOnError a été activé, aucune génération ne s'arrête même en présence d'une erreur.

Projet (.vcproj) Visual C++ et fichiers de solution (.sln)

Les fichiers projet Visual C++ (.vcproj) et solution (.sln) peuvent être passés à MSBuild, tâche. Pour les projets Visual C++, VCWrapperProject est appelé avant de créer le projet interne MSBuild. Pour les solutions Visual C++, SolutionWrapperProject est créé avant de créer projet interne MSBuild. Dans les deux cas, le projet résultant est traité comme tout autre projet MSBuild.

Exécution multiprocessus

Quasiment toutes les activités liées à la génération nécessitent un répertoire constant durant tout le processus de génération pour éviter les erreurs liées aux chemins d'accès. Par conséquent, les projets ne peuvent pas s'exécuter sur des threads différents dans MSBuild parce qu'ils provoqueraient la création de plusieurs répertoires.

Pour éviter ce problème tout en permettant une génération multi-processeur, MSBuild utilise « l'isolation des processus ». En utilisant l'isolation des processus, MSBuild peut créer au maximum n processus, où n représente le nombre de processeurs disponibles sur le système. Par exemple, si MSBuild génère une solution sur un système à deux processeurs, seuls deux processus de génération sont créés. Ces processus sont réutilisés pour générer tous les projets dans la solution.

Voir aussi

Concepts

Tâches MSBuild

Autres ressources

Génération de versions spécifiques du .NET Framework