Seguindo a onda do meu último post que fala sobre o ReSharper, uma extensão para Visual Studio capaz de trazer melhorias para seu código, trago hoje uma ferramenta gratuita e open-source para análise em tempo real a performance da sua aplicação, o MiniProfiler. A ideia é aprender a instalar o MiniProfiler e executar nosso primeiro teste, na Parte 2 deste artigo iremos ver como utilizar o MiniProfiler para localizar anomalias no uso de recursos de banco em uma aplicação ASP.NET WebForms, lembrando que o profiler funciona para ASP.NET MVC, Ruby e Node.js também. Como utilizo o Entity Framework 6, o primeiro passo é instalar via NuGet o pacote base do MiniProfiler e o pacote do EF6+:
MiniProfiler
– The core. Needed for any profiling (all of the packages below list this as a dependency)MiniProfiler.EF6
– For profiling Entity Framework version 6+
No terminal interno no Visual Studio(View > Package Manager Console), executaremos as liprofilernhas abaixo:
PM> Install-Package MiniProfiler
PM> Install-Package MiniProfiler.EF6
O processo acima também pode ser realizado pela tela de gerenciamento do Nuget em seu projeto(Botão direito no csproj > Gerenciar pacotes Nuget). Feita a instalação das dependências, vamos dar um start no MiniProfiler em nossa aplicação e ver como ele apresenta os resultados:
1. INCLUIR O CSS/JS NO ASPX PARA EXIBIR OS RESULTADOS

Caso o namespace StackExchange não seja localizado verifique se o Nuget instalou corretamente a ddl no seu projeto. Veja na aba “Package Manager Console” na imagem acima a execução de comando e a mensagem de instalação bem sucedida.
2. ALTERAR O GLOBAL.ASAX.CS DA APLICAÇÃO
Para que o profiler comece a coletar informações precisamos dar um Start nele:

A mesma ideia vale para parar a coleta, executamos um Stop. Veja que é feito um teste se a requisição é local, a ideia é ajudar a identificar problemas pontuais, se não tiver esse teste o profiler será exibido em produção para os usuários da aplicação.
3. EXECUTANDO A APLICAÇÃO E VENDO OS RESULTADOS
Ao executar seu projeto no Visual Studio, o navegador será aberto e será apresentado um item do lado esquerdo superior da tela inicial da aplicação. Inicialmente verá apenas um tempo referente a sua tela atual, na imagem abaixo vemos três tempos de carregamento em milisegundos pois naveguei por outras páginas.

Ao clicar no item da imagem acima, é exibido os detalhes da coleta que o profiler fez até o momento, observe que para a minha tela Default.aspx ele mostra os eventos do .NET e o tempo de carregamento dos mesmos. Como não tenho ainda nenhum método específico nesta página nada novo é apresentado. Vamos ver no próximo tópico como criar Steps(Passos) no MiniProfiler para capturar detalhes de métodos que estão causando dor de cabeça.

4. CRIANDO UM STEP EM UM TRECHO DE CÓDIGO
Neste último tópico vou mostrar como registrar o tempo de execução em torno de um trecho de código específico, para isso vamos criar um Step(Passo) em volta do código. Na solução tenho uma biblioteca(Class Library) e C# com minha camada de negócio e nela uma classe Empresa com o método CalculaSaldoEmpresa.
namespace BusinessLayer { public class Empresa { public void CalculaSaldoEmpresa() { for (int i = 0; i < 100; i++) { Thread.Sleep(5); } } } }
O método não faz nada de mais, um laço que vai de 0 a 99 e a cada passo aguarda 5ms, mas irá servir para nosso teste. Agora na tela Default.aspx.cs, instancio a classe Empresa e chamo o método que criamos:
namespace MiniProfilerTeste { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { var profiler = MiniProfiler.Current; using (profiler.Step("CalculaSaldoEmpresa")) { Empresa emp = new Empresa(); emp.CalculaSaldoEmpresa(); } } } }
Veja no trecho de código acima que capturamos a analise corrente do profiler com MiniProfiler.Current e usamos ela abaixo para construir nosso Step dentro do using(boa prática!) , passando como parâmetro o nome que queremos que seja exibido no relatório que veremos em seguida. A imagem abaixo mostra o relatório do MiniProfiler na página ao executarmos a aplicação:

Vale lembrar que o próprio Visual Studio possui ferramentas nativas para profiling já faz algum tempo e são muito úteis, a ideia aqui é apenas mostrar uma outra alternativa leve, de fácil instalação e capaz de auxiliar na localização de problemas na sua solução. Na parte 2 deste artigo iremos tentar localizar problemas de chamadas de banco de dados em uma aplicação “na vera” ^_^.
Até a próxima pessoal.