¿Mostrando tiempos de compilación en Visual Studio?
-
09-06-2019 - |
Pregunta
Nuestro servidor de compilación está tardando 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 crear cada proyecto en la solución, de modo que sepa dónde concentrar mis esfuerzos?
En este caso, mejorar el hardware no es una opción.
Intenté configurar la detalle de la salida (en Herramientas/Opciones/Proyectos y soluciones/Compilar y ejecutar/Detalle de la salida de compilación del proyecto MSBuild).Esto no parece tener ningún efecto en el IDE.
Cuando se ejecuta 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 del tiempo necesario para cada proyecto de la solución, para poder determinar dónde estaba tomando su tiempo el proceso de construcción.
Alternativamente, dado que en realidad usamos NAnt para impulsar el proceso de compilación (usamos Jetbrains TeamCity), ¿hay alguna manera de hacer que NAnt me diga el tiempo necesario para cada paso?
Solución
Menú Herramientas → Opciones → Proyectos y Soluciones → Configuración del proyecto VC++ → Tiempo de construcción Deberia trabajar.
Otros consejos
Vaya a Herramientas → Opciones → Proyectos y soluciones → Compilación y ejecución → Detalle de la salida de la compilación del proyecto MSBuild; configúrelo en "Normal" o "Detallado" y el tiempo de compilación aparecerá en la ventana de salida.
Estudio Visual 2012 hasta 2017
Para proyectos de MSBuild (p. ej.todos los proyectos .Net):
Hacer clicTools -> Options
y luego seleccioneProjects and Solutions -> Build and Run
.CambiarMSBuild project build output verbosity
aNormal
.Por lo tanto, mostrará el tiempo transcurrido en cada proyecto de solución que cree.Pero, lamentablemente, no existe una suma de tiempo transcurrido en todo el proyecto.También verá la marca de tiempo de inicio de compilación.PARA Proyecto C/C++:
Hacer clic Tools -> Options
y luego seleccione Projects and Solutions -> VC++ Project Settings
.
Cambiar Build Timing
a Yes
.
Para Visual Studio 2012 puedes usar el Monitor de construcción extensión.
Si estás atascado en VS2005, puedes usar el complemento vs-build-timer.Al finalizar una construcción, muestra el tiempo total necesario 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!
Herramientas->Opciones->Proyectos y soluciones->Crear y ejecutar->
Establezca "Detalle de la salida de compilación del proyecto MSBuild" de "Mínimo" a "Normal"
Dado que su pregunta implica el uso de DevEnv desde la línea de comando, también sugeriría usar MSBuild (que puede crear archivos .sln sin modificaciones).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
le mostrará otras opciones útiles para el registrador de archivos.
Si desea visualizar su compilación, puede utilizar IncrediBuild.IncrediBuild ahora está disponible en modo independiente (no distribuido pero para uso solo 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
Terminé aquí porque solo quería incluir la fecha y la hora en el resultado de la compilación.Si otros buscan algo similar, es tan simple como agregar echo %date% %time%
a los eventos previos a la construcción y/o posteriores a la construcción del proyecto, Propiedades → Compilar → Construir eventos.
Primero haga una compilación y vea qué proyecto aparece primero en el resultado de la compilación (Control + Hogar en la ventana de salida).Haga clic derecho en ese proyecto → Propiedades del proyecto → Compilar → Construir eventos → Preconstrucción.Y echo ###########%date% %time%#############
.
Entonces, cada vez que veas resultados de compilación (o durante la compilación), hazlo. Control + Hogar en 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ías terminar agregando estos detalles a muchos proyectos, ya que el orden de construcción puede cambiar :)
¡Encontré una solución mejor!###
Herramientas → Opciones → Proyectos y Soluciones → Construir y ejecutar → Detalle de la salida de compilación del proyecto MSBuild = Normal (o superior Mínimo).Esto agrega la hora al principio/parte superior de la ventana de salida. Control + Hogar en la ventana de salida debería funcionar.
Si queremos ver cuánto tiempo lleva cada proyecto, entonces Proyectos y Soluciones → Configuración del proyecto VC++ → Tiempo de construcción = sí.Es aplicable a todos los proyectos;"VC++" es engañoso.
Si desea invocar un programa externo que pueda realizar un seguimiento de los tiempos totales de compilación, puede utilizar la siguiente solución para VS 2010 (y quizás versiones anteriores).El siguiente código utiliza CTime de Casey Muratori.Por supuesto, también puedes usarlo para simplemente imprimir el tiempo de construcció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
Creé una extensión para medir los tiempos de construcción y presentar el orden de los eventos en un gráfico: Temporizador de compilación de Visual Studio.
Está disponible en Visual Studio Market y funciona para VS2015 y VS2017.
La presentación visual me parece bastante útil.Además de mostrar qué proyectos tardan más, también muestra las dependencias entre ellos, es decir,proyectos que esperan a que otros los 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.