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 AmaralNeste 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.
- Entity Framework 4: Repositório GenéricoVisual Basic .NET
- As edições 14 da Easy .net Magazine e 88 da .net Magazine já estão disponíveis.ADO.NET
- Postando no Twiiter com .NET e Migre.meC#
- Setup ApplicationsVisual Basic .NET
- Problemas na manipulação de arquivos do MS Excel com .NETVisual Basic .NET