Mostrar tiempos de compilación en Visual Studio?

177

Nuestro servidor de compilación tarda demasiado en compilar uno de nuestros proyectos de C ++. Utiliza Visual Studio 2008. ¿Hay alguna forma de hacer que devenv.com registre el tiempo necesario para construir cada proyecto en la solución, de modo que sepa dónde enfocar mis esfuerzos?

El hardware mejorado no es una opción en este caso.

Intenté configurar la verbosidad de salida (en Herramientas / Opciones / Proyectos y soluciones / Construir y ejecutar / Verbosidad de salida de compilación del proyecto MSBuild). Esto no parece tener ningún efecto en el IDE.

Al ejecutar MSBuild desde la línea de comandos (y, para Visual Studio 2008, debe ser MSBuild v3.5), muestra el tiempo total transcurrido al final, pero no en el IDE.

Realmente quería un informe que llevara mucho tiempo para cada proyecto en la solución, de modo que pudiera averiguar dónde se estaba demorando el proceso de compilación.

Alternativamente, dado que en realidad usamos NAnt para conducir el proceso de compilación (usamos Jetbrains TeamCity), ¿hay alguna manera de que NAnt me diga el tiempo necesario para cada paso?

Roger Lipscombe
fuente

Respuestas:

205

Herramientas de menú → OpcionesProyectos y solucionesConfiguración del proyecto VC ++ → El tiempo de compilación debería funcionar

JesperE
fuente
78
Uno pensaría que está en "Build and Run", pero nooooo, eso habría sido simple
Thomas Bonini,
66
Si lo hubieran puesto allí, alguien más se habría quejado de que no es donde esperarían que fuera. El lugar más obvio para ponerlo es diferente para diferentes usuarios.
JesperE
44
¿Cuál es el resultado de esto?
Coronel Panic
44
@AndreasBonini: en Build and Run encontrarás v̱erbosity de salida de compilación del proyecto MSBuild que puedes configurar por encima de Minimal para obtener tiempos también.
Joey
44
Esto es bueno para perfilar tareas individuales dentro de una etapa de compilación, pero no da resúmenes de toda la compilación.
Fernando González Sánchez
88

Vaya a Herramientas → Opciones → Proyectos y soluciones → Compilar y ejecutar → Verbosidad de salida de compilación del proyecto MSBuild - configure en "Normal" o "Detallado", y el tiempo de compilación aparecerá en la ventana de salida.

Dave Moore
fuente
2
Antes de Visual Studio 2010, los proyectos de Visual C ++ no usaban MSBuild, por lo que esta configuración no tiene ningún efecto. Sin embargo, funciona bien para otros tipos de proyectos.
Roger Lipscombe
23
establecer en "Normal" en lugar de "Detallado" es suficiente :)
andrecarlucci
77
Establecer esto en Normal es lo que la mayoría desearía porque la Configuración del proyecto VC ++ -> El tiempo de compilación muestra demasiados detalles
Ghita
1
Esto es exactamente lo que la mayoría de la gente quiere: tiempo total, y no es que ClCompile haya tomado 22424 ms en uno de los proyectos. Ctrl + Q, compila y ejecuta <Enter>, y cambia primero "mínimo" a "normal".
Tomasz Gandor
36

Visual Studio 2012-2019

  • Para proyectos de MSBuild (por ejemplo, todos los proyectos .Net):
    haga clic Tools -> Optionsy luego seleccione Projects and Solutions -> Build and Run. Cambiar MSBuild project build output verbositya Normal. Por lo tanto, mostrará el tiempo transcurrido en cada proyecto de solución que construya. Pero desafortunadamente no hay Suma de tiempo transcurrido en todo el proyecto. También verá la marca de tiempo de inicio de compilación

  • Para el proyecto C / C ++:

Haga clic Tools -> Optionsy luego seleccione Projects and Solutions -> VC++ Project Settings.

Cambiar Build Timinga Yes.

Sebastian
fuente
44
La solución que ofreció también funciona para mí en VS 2015 para un proyecto C ++. Además, elijo usar esta solución en lugar de, Build Timingya que solo muestra el tiempo total.
O B
1
Sin cambios con VS2019. El "tiempo transcurrido" total se muestra para todos los proyectos de MSBuild (incluido C / C ++).
Farway
9

Para Visual Studio 2012, podría usar la extensión Build Monitor .

Oliver
fuente
1
También podría usarlo para Visual Studio 2013 y 2015.
Sábado
6

Si está atascado en VS2005, puede usar el complemento vs-build-timer . Al finalizar una compilación, muestra el tiempo total empleado y un resumen (opcional) de cada una de las duraciones del proyecto.

Descargo de responsabilidad; Yo lo escribi. Y sí, necesito crear un instalador ... ¡algún día!

MattyT
fuente
¿Está disponible su instalador
Martin
6

Herramientas-> Opciones-> Proyectos y soluciones-> Compilar y ejecutar->

Establezca "Verbosidad de salida de compilación del proyecto MSBuild" de "Mínimo" a "Normal"

RaaFFC
fuente
4

Si desea visualizar su compilación, puede usar IncrediBuild. IncrediBuild ahora está disponible en modo independiente (no distribuido pero solo para usar en 8 núcleos en su máquina local) de forma gratuita como parte de Visual Studio 2015 Update 1

Descargo de responsabilidad: trabajo para IncrediBuild

acumulaciones
fuente
4

Dado que su pregunta implica el uso de DevEnv desde la línea de comandos, también sugeriría usar MSBuild (que puede construir archivos .sln sin modificación).

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

msbuild /? le mostrará otras opciones útiles para el registrador de archivos.

Dave Moore
fuente
4

He creado una extensión para medir los tiempos de compilación y presentar el orden de los eventos en un gráfico: Visual Studio Build Timer .

ingrese la descripción de la imagen aquí

Está disponible en el mercado visual studio y funciona para VS2015, VS2017 y VS2019.

La presentación visual me parece bastante útil. Además de mostrar qué proyectos tardan más, también muestra dependencias entre ellos, es decir, proyectos que esperan que otros se completen antes de comenzar. De esta manera, puede detectar cuellos de botella en la compilación y ver qué dependencias deben romperse para aumentar la paralelización de su compilación.

opetroch
fuente
3
¿Podría actualizarlo para que sea compatible con VS 2019
Konstantin Chernov
3
Estoy un poco ocupado en estos días, pero está en mis planes.
opetroch
2

Terminé aquí porque solo quería la fecha y la hora incluidas en el resultado de la compilación. En caso de que otros busquen algo similar, es tan simple como agregar echo %date% %time%a los eventos previos a la compilación y / o posteriores a la construcción en el proyecto, PropiedadesCompilarEventos de compilación .

Entre fines de semana
fuente
2

Realice primero una compilación y vea qué proyecto aparece primero en la salida de compilación ( Ctrl+ Homeen la ventana de salida). Haga clic derecho en ese proyecto → Propiedades del proyectoCompilarEventos de generaciónPre-construcción . Y echo ###########%date% %time%#############.

Por lo tanto, cada vez que vea resultados de compilación (o durante la compilación) haga Ctrl+ Homeen la ventana de salida. ¡Y en algún lugar de esa área, la hora y la fecha te miran a la cara!

Ah, y podría terminar agregando estos detalles a muchos proyectos, ya que el orden de compilación puede cambiar :)


¡Encontré una mejor solución! ###

HerramientasOpcionesProyectos y solucionesCompilar y ejecutarVerbosidad de salida de compilación del proyecto MSBuild = Normal (o superior a Mínimo ). Esto agrega el tiempo en el inicio / inicio de la ventana de salida. Ctrl+Home en la ventana de salida debería hacer.

Si queremos ver cuánto tiempo lleva cada proyecto, entonces Proyectos y solucionesConfiguración del proyecto VC ++Tiempo de compilación = sí . Es aplicable a todos los proyectos; "VC ++" es engañoso.

Nubes azules
fuente
1

Si desea invocar un programa externo que pueda rastrear sus tiempos de compilación totales, puede usar la siguiente solución para VS 2010 (y tal vez más antiguo). El siguiente código utiliza CTime de Casey Muratori. Por supuesto, también puede usarlo para imprimir simplemente el tiempo de compilación.

Abra el explorador de macros y pegue lo siguiente 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

Respuesta tomada de aquí y de aquí .

Andreas Haferburg
fuente
1

Opciones -> Proyectos y soluciones -> Configuración del proyecto VC ++ -> Tiempo de compilación

ingrese la descripción de la imagen aquí

Wesam
fuente