Отображение времени сборки в Visual Studio?

Нашему серверу сборки требуется слишком много времени для сборки одного из наших проектов C ++. Он использует Visual Studio 2008. Есть ли способ заставить devenv.com регистрировать время, затраченное на создание каждого проекта в решении, чтобы я знал, на чем сосредоточить свои усилия?

Улучшенное оборудование в этом случае не вариант.

Я попытался установить подробность вывода (в разделе Инструменты / Параметры / Проекты и решения / Сборка и запуск / Подробность вывода сборки проекта MSBuild). Похоже, что это не влияет на среду IDE.

При запуске MSBuild из командной строки (а для Visual Studio 2008 это должен быть MSBuild v3.5) отображается общее время, прошедшее в конце, но не в среде IDE.

Мне действительно нужен отчет о затраченном времени для каждого проекта в решении, чтобы я мог выяснить, где процесс сборки занимает свое время.

В качестве альтернативы, поскольку мы фактически используем NAnt для управления процессом сборки (мы используем Jetbrains TeamCity), есть ли способ заставить NAnt сообщать мне время, затраченное на каждый шаг?


person Roger Lipscombe    schedule 17.09.2008    source источник


Ответы (13)


Меню ИнструментыПараметрыПроекты и решенияНастройки проекта VC ++Время сборки должно сработать.

person JesperE    schedule 25.09.2008
comment
Можно было бы подумать, что он находится в разделе "Сборка и запуск", но неееет, это было бы слишком просто - person Thomas Bonini; 03.02.2010
comment
Если бы они поместили его туда, кто-то другой пожаловался бы, что это не то, чего они ожидали бы. Наиболее очевидное место для его размещения у разных пользователей разное. - person JesperE; 03.02.2010
comment
Что из этого получится? - person Colonel Panic; 17.01.2013
comment
@AndreasBonini: В разделе Сборка и запуск вы найдете v̱erbosity вывода сборки проекта MSBuild, который вы также можете установить выше Minimal, чтобы получить тайминги. - person Joey; 22.03.2013
comment
Это хорошо для профилирования отдельных задач на этапе сборки, но не дает сводных данных по всей сборке. - person Fernando Gonzalez Sanchez; 26.11.2016
comment
Чтобы получить какую-либо информацию о времени, необходимо изменить настройку Подробность вывода сборки проекта MSBuild с Minimal (установка по умолчанию) на Обычный (в меню ИнструментыПараметрыПроекты и решенияСборка и запуск ). Возможно, вы можете добавить эту информацию к своему ответу? - person Peter Mortensen; 30.03.2017
comment
@PeterMortensen Не совсем. При параллельной сборке вы получаете время пользователя для каждого проекта, но не время стены. Кажется настолько естественным и легким указать время стены в конце сборки, тот факт, что его там нет, действительно странно (и раздражает) - person ddevienne; 10.09.2019

Перейдите в Инструменты → Параметры → Проекты и решения → Сборка и запуск → Подробность вывода сборки проекта MSBuild - установите значение «Нормальный» или «Подробный», и время сборки отобразится в окне вывода.

person Dave Moore    schedule 17.09.2008
comment
До Visual Studio 2010 проекты Visual C ++ не использовали MSBuild, поэтому этот параметр не действует. Однако отлично работает для других типов проектов. - person Roger Lipscombe; 09.09.2009
comment
достаточно установить на Нормальный, а не на Детальный :) - person andrecarlucci; 10.07.2011
comment
Установка этого параметра на Нормальный - это действительно то, что хотелось бы большинству, потому что Настройки проекта VC ++ - ›Время сборки показывают слишком много деталей. - person Ghita; 28.11.2012
comment
Это именно то, что нужно большинству людей - общее время, а не то, что ClCompile потратил 22424 мс на один из проектов. Ctrl + Q, построить и запустить ‹Enter›, и изменить первый минимальный на нормальный. - person Tomasz Gandor; 11.05.2016

Visual Studio 2012-2019

  • Для проектов MSBuild (например, всех .Net-проектов):
    Нажмите Tools -> Options, а затем выберите Projects and Solutions -> Build and Run. Измените MSBuild project build output verbosity на Normal. Таким образом, он будет отображать Истекшее время в каждом создаваемом им проекте решения. Но, к сожалению, для всего проекта нет суммы затраченного времени. Вы также увидите отметку времени начала сборки

  • ДЛЯ проекта C / C ++:

Щелкните Tools -> Options, а затем выберите Projects and Solutions -> VC++ Project Settings.

Измените Build Timing на Yes.

person Sebastian    schedule 08.08.2014
comment
Предложенное вами решение работает для меня и на VS 2015, и для проекта C ++. Кроме того, я предпочитаю использовать это решение вместо Build Timing, поскольку оно отображает только общее время. - person Or B; 31.03.2016
comment
Без изменений с VS2019. Общее затраченное время отображается для всех проектов MSBuild (включая C / C ++). - person Farway; 25.09.2019

Я создал расширение для измерения времени сборки и представления порядка событий на графике: Таймер сборки Visual Studio.

введите описание изображения здесь

Он доступен на рынке визуальных студий и работает для VS2015, VS2017 и VS2019.

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

person opetroch    schedule 11.01.2019
comment
Не могли бы вы обновить его для поддержки VS 2019 - person Konstantin Chernov; 27.05.2019
comment
Сейчас я немного занят, но это в моих планах. - person opetroch; 29.05.2019

Для Visual Studio 2012 вы можете использовать расширение Build Monitor.

person Oliver    schedule 08.07.2013
comment
Вы также можете использовать его для Visual Studio 2013 и 2015. - person Shad; 23.03.2017

Инструменты-> Параметры-> Проекты и решения-> Сборка и запуск->

Установите для параметра «Детальность вывода сборки проекта MSBuild» значение «Минимальный» на «Нормальный».

person RaaFFC    schedule 16.01.2013

Если вы застряли на VS2005, вы можете использовать плагин vs-build-timer. По завершении сборки отображается общее затраченное время и (необязательно) сводка по длительности каждого проекта.

Заявление об отказе от ответственности; Я написал это. И да, мне нужно создать установщик ... однажды!

person MattyT    schedule 07.04.2010
comment
Доступен ли ваш установщик - person Martin; 15.10.2019

Если вы хотите визуализировать свою сборку, вы можете использовать IncrediBuild. IncrediBuild теперь доступен в автономном режиме (не распространяется, но для использования только на 8 ядрах на вашем локальном компьютере) бесплатно как часть Visual Studio 2015 Update 1

Отказ от ответственности: я работаю в IncrediBuild

person buildops    schedule 06.12.2015

Поскольку ваш вопрос связан с использованием DevEnv из командной строки, я бы также предложил использовать MSBuild (который может строить файлы .sln без изменений).

msbuild /fl /flp:Verbosity=diagnostic Your.sln

msbuild /? покажет вам другие полезные опции для файллоггера.

person Dave Moore    schedule 17.09.2008

Я оказался здесь, потому что просто хотел, чтобы дата и время были включены в вывод сборки. Если другие ищут что-то подобное, достаточно просто добавить echo %date% %time% в события Pre-build и / или Post-build в проекте, PropertiesCompileBuild События.

person InbetweenWeekends    schedule 19.03.2015

Сначала выполните сборку и посмотрите, какой проект появляется первым в выводе сборки (Ctrl + Home в окне вывода). Щелкните этот проект правой кнопкой мыши → Свойства проектаСкомпилироватьСобытия сборкиПредварительная сборка. И echo ###########%date% %time%#############.

Поэтому каждый раз, когда вы видите результаты сборки (или во время сборки), нажимайте Ctrl + Home в окне вывода. И где-то в этом месте время и дата смотрят вам в лицо!

Да, и вы можете добавить эти детали во многие проекты, так как порядок сборки может измениться :)


Я нашел лучшее решение! ###

ИнструментыПараметрыПроекты и решенияСборка и запускПодробность вывода сборки проекта MSBuild = Нормальный (или выше Минимальный). Это добавляет время в начало / верх окна вывода. Ctrl + Home в окне вывода должно подойти.

Если мы хотим узнать, сколько времени занимает каждый проект, тогда Проекты и решенияНастройки проекта VC ++Время сборки = да. Применимо ко всем проектам; «VC ++» вводит в заблуждение.

person Blue Clouds    schedule 05.08.2015

Если вы хотите вызвать внешнюю программу, которая может отслеживать общее время сборки, вы можете использовать следующее решение для VS 2010 (и, возможно, более раннего). В приведенном ниже коде используется CTime Кейси Муратори. Конечно, вы также можете использовать его, чтобы просто распечатать время сборки.

Откройте обозреватель макросов и вставьте перед End Module следующее:

Dim buildStart As Date
Private Sub RunCtime(ByVal StartRatherThanEnd As Boolean)
    Dim Arg As String
    Dim psi As New System.Diagnostics.ProcessStartInfo("ctime.exe")
    If StartRatherThanEnd Then
        psi.Arguments = "-begin"
    Else
        psi.Arguments = "-end"
    End If
    psi.Arguments += " c:\my\path\build.ctm"
    psi.RedirectStandardOutput = False
    psi.WindowStyle = ProcessWindowStyle.Hidden
    psi.UseShellExecute = False
    psi.CreateNoWindow = True
    Dim process As System.Diagnostics.Process
    process = System.Diagnostics.Process.Start(psi)
    Dim myOutput As System.IO.StreamReader = process.StandardOutput
    process.WaitForExit(2000)
    If process.HasExited Then
        Dim output As String = myOutput.ReadToEnd
        WriteToBuildWindow("CTime output: " + output)
    End If
End Sub

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
    WriteToBuildWindow("Build started!")
    buildStart = Date.Now
    RunCtime(True)
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    Dim buildTime = Date.Now - buildStart
    WriteToBuildWindow(String.Format("Total build time: {0} seconds", buildTime.ToString))
    RunCtime(False)
End Sub

Private Sub WriteToBuildWindow(ByVal message As String)
    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = CType(win.Object, OutputWindow)
    If (Not message.EndsWith(vbCrLf)) Then
        message = message + vbCrLf
    End If
    ow.OutputWindowPanes.Item("Build").OutputString(message)
End Sub

Ответ взят из здесь и здесь.

person Andreas Haferburg    schedule 10.05.2016

Параметры -> Проекты и решения -> Настройки проекта VC ++ -> Время сборки

введите здесь описание изображения

person Wesam    schedule 03.07.2018