Tempo de compilação no Visual Studio

O Visual Studio utiliza o msbuild para compilação dos projetos e soluções. Essa ferramenta possibilita que seja exibido o tempo de compilação de cada projeto separadamente. Vou mostrar onde você pode configurar o Visual Studio para habilitar essa opção e como fazer para exibir o tempo total de compilação da solução.

EXIBINDO O TEMPO DE COMPILAÇÃO PARA CADA PROJETO

Navegue no menu Tools > Options e abra o painel Projects and Solutions > Build and Run. Lá dentro você encontrará o nível de detalhamento da mensagem na janela de saída. O padrão é Minimal, se você alterar para Normal o msbuild passará a exibir uma quantidade maior de informações sobre a compilação, entre elas a duração.

EXIBINDO O TEMPO DE COMPILAÇÃO DA SOLUÇÃO

Infelizmente o msbuild não traz uma forma pronta para exibir o tempo total de compilação da solução. No entanto, consegui encontrar uma alternativa no stackoverflow que faz uso das macros do Visual Studio. Basta acrescentar um código a uma macro já existente e a IDE passará a exibir “automagicamente” o tempo gasto para compilar toda a solução conforme ilustrado abaixo.

Para adicionar o código a macro, você precisar abrir a IDE através do menu Tools > Macros > Macros IDE.

No projeto MyMacros, clique o botão direito e adicione uma referência a System.Windows.Forms. Agora basta copiar o código informado abaixo e colar no arquivo EnvironmentEvents no local informado no figura.

    Dim buildStart As Date

    Private Function IsBuild(ByVal scope As EnvDTE.vsBuildScope, ByVal action As EnvDTE.vsBuildAction) As Boolean
        Return scope = vsBuildScope.vsBuildScopeSolution AndAlso (action = vsBuildAction.vsBuildActionBuild OrElse action = vsBuildAction.vsBuildActionRebuildAll)
    End Function

    Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
        If (IsBuild(Scope, Action)) Then
            buildStart = Date.Now
        End If
    End Sub

    Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
        If (IsBuild(Scope, Action)) Then
            Dim buildTime = Date.Now - buildStart
            WriteToBuildWindow(System.Environment.NewLine)
            WriteToBuildWindow(String.Format("Build time: {0}", buildTime.ToString))
            WriteToBuildWindow(System.Environment.NewLine)
        End If
    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)
        For Each owPane As OutputWindowPane In ow.OutputWindowPanes
            If (owPane.Name.Equals("Build")) Then
                owPane.OutputString(message)
                Exit For
            End If
        Next
    End Sub
Anúncios
%d blogueiros gostam disto: