it-swarm-pt.tech

Exibindo tempos de compilação no Visual Studio?

Nosso servidor de construção está demorando muito para construir um de nossos projetos C++. Ele usa o Visual Studio 2008. Existe alguma maneira de obter devenv.com para registrar o tempo necessário para construir 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/Construir e Executar/Detalhar Saída do Projeto MSBuild). 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 de tempo para cada projeto na solução, para que eu pudesse descobrir onde o processo de criação estava demorando.

Alternativamente, como usamos o NAnt para conduzir o processo de construção (usamos o Jetbrains TeamCity), existe uma maneira de fazer com que o NAnt me diga o tempo gasto para cada etapa?

155
Roger Lipscombe

Menu Ferramentas Opções Projetos e Soluções Configurações do Projeto VC++ Construir Tempo deve funcionar.

177
JesperE

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

73
Dave Moore

Visual Studio 2012 até 2017

  • Para projetos MSBuild (por exemplo, todos os .Net-Projects):
    Clique em Tools -> Options e selecione Projects and Solutions -> Build and Run. Altere MSBuild project build output verbosity para Normal. Por isso, ele exibirá o tempo decorrido em cada projeto de solução que ele criar. Mas infelizmente não há Tempo Decorrido sobre todo o projeto. Você também verá o registro de data e hora da construção iniciada

  • para projeto C/C++:  

Clique em Tools -> Options e selecione Projects and Solutions -> VC++ Project Settings.

Altere Build Timing para Yes.

27
Sebastian

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

9
Oliver

Se você está preso no VS2005 você pode usar o plugin 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 isso. E sim, preciso criar um instalador ... um dia!

5
MattyT

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

Defina "Detalhamento de saída de compilação do projeto MSBuild" de "Mínimo" para "Normal"

5
RaaFFC

Como sua pergunta envolve o uso do DevEnv a partir da linha de comando, eu também sugeriria usar MSBuild (que pode construir arquivos .sln sem modificação). 

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

msbuild /? mostrará outras opções úteis para o filelogger.

4
Dave Moore

Se você quiser visualizar sua construção, poderá usar o IncrediBuild. IncrediBuild agora está disponível em modo standalone (não distribuído, mas para uso somente em 8 núcleos em sua máquina local) gratuitamente como parte do Visual Studio 2015 Update 1

Disclaimer: Eu trabalho para o IncrediBuild

3
buildops

Acabei aqui porque queria apenas que a data e a hora fossem incluídas na saída da compilação. Se outros estiverem procurando por algo semelhante, é tão simples quanto adicionar echo %date% %time% aos eventos Pre-build e/ou Post-build no projeto, Properties Compile Build Events .

2
InbetweenWeekends

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

Então toda vez que você vê resultados de compilação (ou durante a compilação) Ctrl + Home na janela de saída. E em algum lugar nessa área, a hora e a data o encaram!

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


Eu encontrei uma solução melhor! ###

FerramentasOpçõesProjetos e SoluçõesConstruir e Executarverbosidade de saída de construção do projeto MSBuild = Normal (ou acima de Mínimo). Isso adiciona o tempo no início/início da janela de saída. Ctrl + Home na janela de saída deve fazer.

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

2
Blue Clouds

Se você quiser invocar um programa externo que possa rastrear seus tempos totais de compilação, poderá usar a seguinte solução para o VS 2010 (e talvez mais antiga). O código abaixo usa o CTime por Casey Muratori. Claro que você também pode usá-lo para simplesmente imprimir o tempo de compilação.

Abra a macro Explorer e cole o seguinte antes de 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 retirada de aqui e aqui .

1
Andreas Haferburg

Opções -> Projetos e Soluções -> Configurações do Projeto VC++ -> Construir Tempo

enter image description here

0
Wesam

Eu 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 .

enter image description here

Está disponível no mercado de estúdios visuais e funciona para VS2015 e VS2017.

Acho a apresentação visual bastante útil. Além de mostrar quais projetos demoram mais, ele também mostra dependências entre eles, ou seja, projetos que aguardam que os outros sejam concluídos antes de iniciarem. Dessa forma, você pode identificar afunilamentos na compilação e ver quais dependências precisam ser quebradas para aumentar a paralelização de sua compilação.

0
opetroch