MSBuild не делает сборку полностью параллельной - PullRequest
1 голос
/ 31 октября 2008

У меня есть проект MSBuild, в котором у меня есть задача, которая вызывает несколько проектов, где я устанавливаю BuildInParallel = "true"

Пример:

  <Message Text="MSBuild project list = @(ProjList)" />
  <!-- Compile in parallel -->
  <MSBuild Projects="@(ProjList)" 
           Targets="Build" 
           Properties="Configuration=$(Configuration)" 
           BuildInParallel="true" /> 

Эти подпроекты фактически вызывают инструмент командной строки для фактического «построения» - назовите его compile.exe. Выполнение грубого профилирования (спасибо taskmgr.exe) процесса сборки приводит к следующим результатам:

на основе параметра / m - я вижу точное число запущенных процессов MSBuild.exe, что, конечно, ожидается - общее число доступных одновременных процессов сборки.

Однако то, что я ожидаю увидеть, - это количество процессов compile.exe. По сути, каждый процесс MSBuild просто оборачивается и вызывает compile.exe. Я вижу, что запускается несколько файлов compile.exe, затем они медленно заканчивают работу, пока я не увижу только один единственный файл compile.exe. Задачи, выполняемые каждым файлом compile.exe, занимают разное количество времени, поэтому ожидается, что одна из них займет намного больше времени, чем другие.

Однако никакие другие compile.exe не создаются до тех пор, пока не будет завершен первый пакет. Другими словами, если у меня есть / m: 4 - я буду видеть 4 файла compile.exe, пока все не будет завершено, тогда будут появляться еще 4.

Это не совсем параллельно мне. Кто-нибудь еще видел такое поведение? Я просто что-то неправильно понимаю?

Ответы [ 2 ]

1 голос
/ 06 апреля 2013

Вы пытались использовать опцию msbuild /ds? Он создает подробное резюме, которое может быть полезно при устранении узких мест в параллельных сборках. На сайте MSDN есть довольно хорошая запись в блоге.

1 голос
/ 14 июля 2009

Посмотрите на новые сообщения. Взгляните на книгу Hashimi MSPress - настоятельно рекомендуется.

Если вы используете TeamBuild, MaxProcesses необходимо настроить в файле конфигурации службы сборки. [Но вы бы сказали.]

Если вы запускаете msbuild самостоятельно, вам нужно вызвать msbuild с / m, чтобы что-то произошло.

Все ли файлы в @ (ProjList) содержат ToolsVersion = 3.5?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...