Atenção: esse artigo tem uma palestra complementar. Clique e assista!
Este artigo apresenta como utilizar a ferramenta de profiling de código existente no Visual Studio 2008 para detectar gargalos de desempenho em aplicações .NET. Através da criação de uma aplicação WinForms com trechos de código não otimizados, o leitor será conduzido por um overview completo das funcionalidades analíticas disponibilizadas pela ferramenta.
Para que serve
A realização de análises de desempenho do código pode ser utilizada tanto de maneira reativa, quando o usuário ou a própria equipe de desenvolvimento detecta que determinada funcionalidade da aplicação está desempenhando abaixo do esperado, quanto de maneira pró-ativa, medindo o impacto de qualquer alteração realizada no código fonte com base numa medição anteriormente realizada.
Em que situação o tema é útil
A utilização da funcionalidade de profiling de código provê ao desenvolvedor a possibilidade de detectar, com facilidade, quais pontos de seu código fonte consomem mais recursos. Incorporada ao dia-a-dia, mostra-se como uma ferramenta incrível para acelerar a detecção de gargalos de desempenho, que podem comprometer a aplicação.
Resumo do DevMan
Problemas de desempenho em aplicações .NET são cenas comum no dia-a-dia da maior parte dos desenvolvedores. Através da ferramenta de profiling de código embutida no Visual Studio, este artigo apresentará como detectar problemas de desempenho em qualquer aplicação .NET. Para ilustração das funcionalidades, será construída uma aplicação WinForms com problemas de desempenho cujos gargalos serão detectados e resolvidos ao longo do artigo.
Provavelmente você já tenha lido em revistas ou sites, dicas ou até mesmo artigos inteiros sobre boas práticas de desempenho no desenvolvimento de aplicações .NET. Mais provável ainda é que você já tenha desenvolvido alguma funcionalidade que possuía um desempenho normal, mas que após algumas semanas de uso, se tornou tão lenta a ponto de gerar reclamações do cliente. No mínimo, você certamente já utilizou alguma aplicação cuja lentidão extrema tenha lhe irritado ao ponto de perder a paciência e finalizar o processo através do gerenciador de tarefas.
Comumente relacionados ao volume de dados tratado pelo sistema, mas não exclusivos de aplicações com alto troughput (quantidade de dados transportados de um local para outro), arrisco afirmar que problemas de desempenho (ou performance) são tão antigos quanto a própria programação. A tão requisitada escalabilidade, afinal, pode ir por água abaixo tão logo encontre objetos criados a revelia, algoritmos mal construídos ou operações de leitura e escrita excessivamente granulares.
Apesar de relativamente fáceis de enumerar, infelizmente problemas de desempenho nem sempre são tão facilmente detectáveis. Assim como uma consulta no banco de dados que tem bom desempenho com um filtro A se torna lenta demais com um filtro B ligeiramente diferente, trechos de código podem e provavelmente terão um desempenho de maneira diferenciada de acordo com o volume e a característica dos dados com os quais são executados. Encontrar seus gargalos é uma questão de criteriosa análise.
Por se tratarem de problemas tão comuns e antigos, seria esperado que a detecção e resolução destes problemas já estivessem em boa parte automatizadas e facilitadas ao desenvolvedor. Ferramentas de teste de stress deram um grande passo ao permitir que determinada funcionalidade da aplicação seja avaliada como uma blackbox: saber que o processamento de um lote de registros está lento é um grande começo. Num ambiente cada vez mais complexo, entretanto, o gargalo pode estar em diversos lugares: latência de rede, lógica da aplicação, banco de dados etc.
Buscando facilitar e aperfeiçoar a análise no que se refere principalmente ao desempenho do código fonte gerado, a Microsoft já disponibilizava junto ao Visual Studio uma ferramenta de profiling de código desde suas versões mais antigas. A partir da versão 2005, entretanto, o conjunto de funcionalidades de análise e comparação foi amplamente incrementado, tornando o profiler embutido no IDE um verdadeiro arrasa quarteirão na detecção de gargalos de desempenho no código fonte de qualquer aplicação .NET.
Você verá neste artigo como as funcionalidades de análise e comparação da ferramenta de profiling de código do Visual Studio 2008 podem auxiliar na melhoria do desempenho de seu código fonte. A partir da construção de uma aplicação WinForms realmente simples, será apresentado o passo a passo necessário à otimização de qualquer tipo de aplicação .NET, permitindo que você encontre seus problemas de performance de maneira bastante simples.
Profiling é o ato de investigar o comportamento de um software baseando-se em informações obtidas em tempo real (durante a execução desse software). Desse forma, podemos dizer que ferramentas de profiling realizam uma análise dinâmica de determinado software. O principal motivo do profiling é identificar trechos de sistemas que precisam ser melhorados para aumentar a velocidade, diminuir o consumo de memória geral.