Desenvolvimento - Visual Basic .NET

Medindo a Performance de seu Código com Visual Studio Team System 2008

Neste artigo vou mostrar como usar as ferramentas de performance (Profilling e Performance) do Team System.

por Fernando Amaral



Neste artigo vou mostrar como usar as ferramentas de performance (Profilling e Performance) do Team System. Pensando em um modelo de código que poderia apresentar para nossa medição de performance, lembrei da concatenação de strings clássica utilizando operadores += ou &=, versus a concatenação usando a classe StringBuilder. Como um bom desenvolvedor .NET você deve saber que o classe StringBuilder é capaz de concatenar string de forma muito mais otimizada. Vamos aproveitar nosso exemplo para provar isso.

Crie uma aplicação console, dei o nome de Strings, mantenha o nome padrão do arquivo criado pelo VS, Module1.vb para VB e Programa.cs para C#. Adicione uma nova classe, de ao arquivo e a classe o Nome MinhaString. Veja abaixo o código criado na classe, primeiramente em VB em seguida em C#:

Imports System.Text

Public Class MinhaString

    Const Alfabeto As String = "abcdefghijklmnopqrstuvxwyz"

    Public Function Concact() As String

        Dim Resultado As String = ""

        For index As Integer = 0 To Alfabeto.Length - 1

            Resultado &= Alfabeto(index)

        Next

        Return Resultado

    End Function

    Public Function StringBuilder() As String

        Dim MeuStringBuilder As New StringBuilder("")

        For index As Integer = 0 To Alfabeto.Length - 1

            MeuStringBuilder.Append(Alfabeto(index))

        Next

        Return MeuStringBuilder.ToString

    End Function

End Class

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

   

    class MinhaString

    {

        const string Alfabeto = "abcdefghijklmnopqrstuvxwyz";

        public string Concact()

        {

            string Resultado = "";

            for (int index = 0; index <= (Alfabeto.Length - 1); index++)

            {

                Resultado += Alfabeto[index];

            }

            return Resultado;

        }

        public string StringBuilder()

        {

            StringBuilder MeuStringBuilder = new StringBuilder("");

            for (int index = 0; index <= Alfabeto.Length - 1; index++)

            {

                MeuStringBuilder.Append(Alfabeto[index]);

            }

            return MeuStringBuilder.ToString();

        }

}

A classe possui duas funções que em um laço remontam o alfabeto e a retornam como parametro. Uma das funções, Concact, concatena a string, a outra, StringBuilder, usa a classe StringBuilder para fazer a concatenação.

No arquivo principal do projeto, Module1.vb ou Programa.cs, instanciamos a classe e fazemos a chamada a cada um dos métodos:

Module Module1

    Sub Main()

        Dim Texto As New MinhaString

        Console.WriteLine(Texto.Concact)

        Console.WriteLine(Texto.StringBuilder)

    End Sub

End Module

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

           MinhaString Texto = new MinhaString();

           Console.WriteLine(Texto.StringBuilder());

           Console.WriteLine(Texto.Concact());

         }

    }

}

Se você executar a aplicação provavelmente não vai ter tempo de ver nada, já que nosso objetivo é medir o desempenho. Se você quizer observar a saida adicione o método Console.Readline() como última linha, porém, para executar o teste, remova novamente a linha.

Vamos agora medir a performance da aplicação. Acesse o menu Analyze, opção Lauch Performance Wizard:

Inicialmente você deve informar qual aplicação deseja analizar. Você vai ver entre as opções as aplicações da soluções atual, ou ainda pode escolher um executavél, dll ou aplicação Asp.Net, nestes casos você terá que informar a localização e os parametros necessários para a execução da aplicação. Informe Strings para analizarmos a aplicação que acabamos de criar.

Na próxima etapa devemos selecionar entre os tipos de análise que queremos utilizar. As opções são Sampling e Instrumentation.

Sampling é uma técnica mais simples, basicamente ela mede a situação da aplicação em termos de consumo de recursos em determinados intervalos. A instrumentação insere código de avalição no aplicação. A Instrumentação traz resultados mais precisos e legiveis, por isso vamos utiliza-la neste exemplo. Clique em avançar e encerre o wizard.

Veja que o VS abre o Performance Explorer, com a analise que acabamos de criar.

Se você clicar com o botão direito sobre a avaliação Strings e selecionar propriedades., verá que poderá ajustar diversas outras configurações da analise que não foram configuradas no Wizard. Neste aritgo vamos manter as configurações padrão. Clique com o botão direito sobre Strings e clique sobre Lauch With Profiling:

A aplicação é executada e um relatório é adicionado a pasta Reports. Os relatórios de análise são arquivos com a extensão psess. A cada execução da análise, um novo relatório é adiconada a pasta. O relatório é exibido imediatamente no VS:

O relatório possui 7 modos diferentes de visualização, vamos ver uma breve descrição de alguns deles: Summary mostra um resumo geral da execução da análise. Call Tree mostra a execução de forma hierárquica, função a função. Modules separa a execução também em árvore porém separada por módulos. Caller / Calle é dividido em tres seções, na primeira a função que chamou, na segunda a função chamada e na terceiras as funções chamadas pela do meio, sendo que você pode “promover” uma função ao meio clicando sobre a mesma. Functions traz uma descrição das funções chamadas com diversos indices de desempenho.

Agora vamos uma análise rápida do relatório acima. Veja que a função Concact foi executada em 14,8 Milesegundos, o que equivale a 40,48% de tempo de execução do programa, enquanto StringBuilder foi executada em 0,96 milesegundos, 2,62 % do tempo de execução do programa:

Em artigo futuro, vamos ver como tirar maior proveito das ferramentas de medição do VS Team System 2008, bem como entender melhor os relatórios gerados.

Fernando Amaral

Fernando Amaral - Certificado PMP pelo PMI, CDIA+ pela CompTia, MCP, MCAD, MCSD, MCDBA, MCT pela Microsoft. Pós Graduado em Gestão de Sistemas de Informação (UNIDERP) e Melhoria em Processos de Software (UFLA). Atualmente reside em Campo Grande, MS, onde presta consultoria, treinamentos e palestras na área de TI.
Blog:
http://www.fernandoamaral.com.br.