Génération parallèle de plusieurs projets
MSBuild 3.5 inclut deux façons d'optimiser la performance de génération sur les systèmes à plusieurs processeurs, comme suit :
En utilisant le commutateur /maxcpucount sur la ligne de commande.
En utilisant le paramètre de tâche BuildInParallel dans la tâche MSBuild.
Commutateur /Maxcpucount
Le commutateur /maxcpucount ou /m en abrégé, permet à MSBuild 3.5 de créer le nombre spécifié de processus MSBuild.exe qui peuvent être exécutés en parallèle. Ces processus sont également appelés « processus de travail ». Chaque processus de travail utilise un processeur distinct si disponible pour générer un projet pendant que d'autres processeurs disponibles génèrent d'autres projets. Par exemple, la valeur « 4 » attribuée à /maxcpucount demande à MSBuild de créer quatre processus de travail pour générer le projet.
Un exemple d'utilisation du commutateur /maxcpucount sur la ligne de commande est illustré ci-dessous.
C:\WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj /maxcpucount:3
Cet exemple demande à MSBuild d'effectuer la génération en utilisant trois processus de travail. En utilisant cette configuration, trois projets peuvent être générés simultanément. Pour optimiser les performances liées à la génération, définissez la valeur de /maxcpucount au nombre de processeurs ou de cœurs du système.
Paramètre de tâche BuildInParallel
BuildInParallel est un paramètre booléen facultatif dans une tâche MSBuild. Lorsque BuildInParallel a la valeur true (sa valeur par défaut), plusieurs processus de travail sont générés pour créer simultanément autant de projets que possible. Pour lui permettre de fonctionner correctement, le commutateur /maxcpucount doit avoir une valeur supérieure à 1 et le système doit être de type dual-core ou avoir au moins deux processeurs.
Les éléments suivants sont un exemple tiré de microsoft.common.targets pour la définition du paramètre BuildInParallel.
<PropertyGroup>
<BuildInParallel Condition="'$(BuildInParallel)' ==
''">true</BuildInParallel>
</PropertyGroup>
<MSBuild
Projects="@(_MSBuildProjectReferenceExistent)"
Targets="GetTargetPath"
BuildInParallel="$(BuildInParallel)"
Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);
%(_MSBuildProjectReferenceExistent.SetPlatform)"
Condition="'@(NonVCProjectReference)'!='' and
('$(BuildingSolutionFile)' == 'true' or
'$(BuildingInsideVisualStudio)' == 'true' or
'$(BuildProjectReferences)' != 'true') and
'@(_MSBuildProjectReferenceExistent)' != ''"
ContinueOnError="!$(BuildingProject)">
<Output TaskParameter="TargetOutputs"
ItemName="_ResolvedProjectReferencePaths"/>
</MSBuild>
Voir aussi
Concepts
Utilisation de plusieurs processeurs pour générer des projets
Écriture de journaux prenant en charge plusieurs processeurs