Partager via


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