Exibindo tempos de compilação no Visual Studio?

177

Nosso servidor de compilação está demorando muito para criar um de nossos projetos em C ++. Ele usa o Visual Studio 2008. Existe alguma maneira de obter o devenv.com para registrar o tempo necessário para criar cada projeto na solução, para que eu saiba onde concentrar meus esforços?

O hardware aprimorado não é uma opção neste caso.

Tentei definir a verbosidade de saída (em Ferramentas / Opções / Projetos e soluções / Compilar e executar / Projeto MSBuild, compilar verbosidade de saída). Isso não parece ter nenhum efeito no IDE.

Ao executar o MSBuild a partir da linha de comando (e, para o Visual Studio 2008, ele precisa ser o MSBuild v3.5), ele exibe o tempo total decorrido no final, mas não no IDE.

Eu realmente queria um relatório demorado para cada projeto na solução, para poder descobrir onde o processo de compilação estava demorando.

Como alternativa, já que usamos o NAnt para conduzir o processo de compilação (usamos o Jetbrains TeamCity), existe uma maneira de fazer o NAnt me dizer o tempo necessário para cada etapa?

Roger Lipscombe
fonte

Respostas:

205

Ferramentas do menu → OpçõesProjetos e soluçõesConfigurações do projeto VC ++ → O tempo de compilação deve funcionar.

JesperE
fonte
78
Alguém poderia pensar que está em "Build and Run", mas nãooooo, isso teria sido muito simples
Thomas Bonini
6
Se eles tivessem colocado lá, alguém teria reclamado que não é onde eles esperam que seja. O lugar mais óbvio para colocá-lo é diferente para diferentes usuários.
JesperE
4
Qual é o resultado disso?
Coronel Panic
4
@AndreasBonini: Em Compilar e Executar, você encontrará uma variedade de resultados de compilação do projeto MSBuild, que você pode definir acima de Mínimo para obter horários também.
Joey
4
Isso é bom para criar perfil de tarefas individuais dentro de um estágio de construção, mas não fornece resumos de toda a construção.
Fernando Gonzalez Sanchez
88

Vá para Ferramentas → Opções → Projetos e soluções → Compilar e executar → Detalhamento da saída da compilação do projeto MSBuild - defina como "Normal" ou "Detalhado" e o tempo de compilação aparecerá na janela de saída.

Dave Moore
fonte
2
Antes do Visual Studio 2010, os projetos do Visual C ++ não usavam o MSBuild, portanto essa configuração não tem efeito. Funciona bem para outros tipos de projeto, no entanto.
9139 Roger Lipscombe
23
No modo "Normal" em vez de "detalhes" é suficiente :)
andrecarlucci
7
A definição dessa to Normal é realmente o que mais gostaria porque Configurações do projeto VC ++ -> Mostra Desenvolver temporização de forma demasiada detalhes
Ghita
1
É exatamente isso que a maioria das pessoas deseja - tempo total, e não que o ClCompile tenha 22424ms em um dos projetos. Ctrl + Q, crie e execute <Enter> e altere primeiro "mínimo" para "normal".
Tomasz Gandor
36

Visual Studio 2012-2019

  • Para projetos do MSBuild (por exemplo, todos os projetos .Net):
    Clique Tools -> Optionse selecione Projects and Solutions -> Build and Run. Mude MSBuild project build output verbositypara Normal. Portanto, ele exibirá o tempo decorrido em todos os projetos de solução criados. Mas, infelizmente, não há soma de tempo decorrido em todo o projeto. Você também verá o carimbo de data / hora iniciado pela compilação

  • Para o projeto C / C ++:

Clique Tools -> Optionse depois selecione Projects and Solutions -> VC++ Project Settings.

Mude Build Timingpara Yes.

Sebastian
fonte
4
A solução que você ofereceu funciona para mim no VS 2015 também para um projeto C ++. Além disso, optei por usar esta solução em vez de, Build Timinguma vez que exibe apenas o tempo total.
Ou B
1
Nenhuma alteração no VS2019. O total de "tempo decorrido" é mostrado para todos os projetos do MSBuild (incluindo C / C ++).
Farway 25/09/19
9

Para o Visual Studio 2012, você pode usar a extensão Build Monitor .

Oliver
fonte
1
Você também pode usá-lo para o Visual Studio 2013 e 2015.
Shad 23/03
6

Se você está preso no VS2005, pode usar o plug-in vs-build-timer . Na conclusão de uma construção, mostra o tempo total gasto e um resumo (opcional) de cada uma das durações do projeto.

Aviso Legal; Eu escrevi. E sim, preciso criar um instalador ... um dia!

MattyT
fonte
O seu instalador está disponível
Martin
6

Ferramentas-> Opções-> Projetos e Soluções-> Construir e Executar->

Defina "verbosidade de saída do build do projeto MSBuild" de "Mínimo" para "Normal"

RaaFFC
fonte
4

Se você deseja visualizar sua compilação, pode usar o IncrediBuild. O IncrediBuild agora está disponível no modo autônomo (não distribuído, mas para uso apenas em 8 núcleos em sua máquina local) gratuitamente como parte da Atualização 1 do Visual Studio 2015

Isenção de responsabilidade: trabalho para o IncrediBuild

buildops
fonte
4

Como sua pergunta envolve o uso do DevEnv na linha de comando, sugiro também o uso do MSBuild (que pode criar arquivos .sln sem modificação).

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

msbuild /? mostrará outras opções úteis para o registrador de arquivos.

Dave Moore
fonte
4

Criei uma extensão para medir os tempos de compilação e apresentar a ordem dos eventos em um gráfico: Visual Studio Build Timer .

insira a descrição da imagem aqui

Está disponível no mercado do visual studio e funciona para o VS2015, VS2017 e VS2019.

Acho a apresentação visual bastante útil. Além de mostrar quais projetos demoram mais, também mostra dependências entre eles, ou seja, projetos que aguardam a conclusão de outros antes de começar. Dessa maneira, você pode identificar gargalos na compilação e ver quais dependências precisam ser quebradas para aumentar a paralelização da compilação.

opetroch
fonte
3
Você poderia atualizá-lo para dar suporte ao VS 2019
Konstantin Chernov
3
Hoje estou um pouco ocupado, mas está nos meus planos.
Opetroch 29/05/19
2

Acabei aqui porque queria apenas a data e a hora incluídas na saída da compilação. Caso outras pessoas procurem algo semelhante, é tão simples quanto adicionar echo %date% %time%aos eventos de Pré-compilação e / ou Pós-compilação no projeto, PropriedadesCompilarCompilar Eventos .

Entre os fins de semana
fonte
2

Faça uma compilação primeiro e veja qual projeto está aparecendo primeiro na saída da compilação ( Ctrl+ Homena janela de saída). Clique com o botão direito do mouse nesse projeto → Propriedades do projetoCompilarCriar eventosPré-compilar . E echo ###########%date% %time%#############.

Portanto, toda vez que você vê resultados da compilação (ou durante a compilação), faça Ctrl+ Homena janela de saída. E em algum lugar nessa área, a hora e a data olham para o seu rosto!

Ah, e você pode acabar adicionando esses detalhes a muitos projetos, pois a ordem de construção pode mudar :)


Encontrei uma solução melhor! ###

FerramentasOpçõesProjetos e soluçõesConstruir e executarProjeto MSBuild criar verbosidade de saída = Normal (ou acima de Mínimo ). Isso adiciona o tempo no início / topo da janela de saída. Ctrl+ Homena janela de saída deve fazer.

Se quisermos ver quanto tempo cada projeto leva, então Projetos e SoluçõesConfigurações do Projeto VC ++Tempo de Construção = yes . É aplicável a todos os projetos; "VC ++" é enganoso.

Nuvens azuis
fonte
1

Se você deseja chamar um programa externo que pode rastrear o tempo total de compilação, use a seguinte solução para o VS 2010 (e talvez mais antigo). O código abaixo usa CTime by Casey Muratori. Obviamente, você também pode usá-lo para simplesmente imprimir o tempo de compilação.

Abra o macro explorer e cole o seguinte antes 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

Resposta tirada daqui e aqui .

Andreas Haferburg
fonte
1

Opções -> Projetos e soluções -> Configurações do projeto VC ++ -> Tempo da compilação

insira a descrição da imagem aqui

Wesam
fonte