Partager via


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

MSBuild 3,5 peut tirer parti des systèmes dotés de plusieurs processeurs, ou des processeurs de plusieurs cœurs.Un processus de génération séparé est créé pour chaque processeur disponible.Par exemple, si le système comporte quatre processeurs, quatre processus de génération sont créés.MSBuild peut traiter ces builds simultanément, et par conséquent globalement la durée de la génération est réduite. Toutefois, la génération parallèle introduit des modifications de la façon dont les processus de génération se produisent.Cette rubrique aborde ces modifications.

Références entre projets

Si Microsoft Build Engine rencontre une référence entre projets (P2P) lors de l'exécution de builds parallèles pour la génération d'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

Dans les builds parallèles, les erreurs et exceptions ne se produisent pas nécessairement aux mêmes moments que dans une build non parallèle, et lorsque la build d'un projet échoue, les autres builds de projet continuent.MSBuild n'arrêtera aucune génération de projet qui génère en parallèle à celle qui a échoué. D'autres projets continuer à générer jusqu'à ce qu'elles réussissent ou échouent.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 d'abord appelé, puis le projet MSBuild interne est créé.Pour les solutions Visual C++, SolutionWrapperProject est créé avant le projet MSBuild interne.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

Génération parallèle de plusieurs projets avec MSBuild

Tâches MSBuild