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