Teste de performance de aplicações .NET Core com BenchMarkDotNet

Image for post
Image for post

Ao dedicar tempo pesquisando referências para um outro artigo que estava escrevendo relacionando a AuthenticationType no Asp.Net, eu me deparei sem querer com algo que pra mim era extremamente novo: BenckmarkDotNet.

Eu já havia testado ao longo dos anos diversas ferramentas para verificação de performance e achei esta particularmente interessante por permitir que trechos de código sejam comparados quanto à performance, de forma extremamente simples, caso tenhamos dúvidas de qual forma de implementação é mais vantajosa em relação à utilização de recursos computacionais, rapidez e outros aspectos que se considerem relevantes. Isto permite melhores refatorações baseadas em métricas confiáveis.

O framework (se é que podemos assim denominá-lo) é uma iniciativa open-source da comunidade e está disponível no gihub no link abaixo:

Mas, vamos a um exemplo prático de sua utilização?

Exemplo prático

Para fins de demonstração prática, vamos criar uma aplicação simples do tipo Console Application no Visual Studio 2017:

Após isto vamos adicionar ao projeto uma classe simples para realização de operações matemáticas, contendo um método simples que calcula um determinado número por ele mesmo apenas para fins de exemplo:

Obs: por questões de simplificação para este exemplo, criei a classe no próprio arquivo Program.cs do projeto.

Há outras formas de implementar o método NumeroAoQuadrado como, por exemplo, utilizando Math.Pow. Sendo assim, vamos comparar a performance implementando o mesmo método das duas formas: multiplicando-se manualmente o número por ele mesmo e utilizando Math.Pow e analisaremos os resultados.

Para conseguirmos utilizar a biblioteca BenckmarkDotNet basta instalar o pacote correspondente via Nuget:

Após concluída a instalação é necessário referenciar a sua utilização nas diretivas, conforme código-fonte abaixo:

Para compararmos as duas formas de implementação, vamos criar um segundo método chamado NumeroAoQuadradoMathPow. Para os métodos que desejamos monitorar a performance, é necessário colocar a anotação “benchmark”, conforme código abaixo. Também vamos atribuir um valor 1000 para a propriedade Number, para fins de teste.

Por fim, vamos incluir o “sumary” exigido pela biblioteca de monitoramento, passando como parâmetro a classe que desejamos monitorar, conforme código abaixo.

E então temo o tão esperado teste de performance. Basta rodar a aplicação e aguardar o término da análise. Eis o resultado:

Como pode ser visto na imagem, o método com a implementação Math.Pow apresentou desempenho ligeiramente inferior à primeira implementação. Para sistemas mais complexos e críticos, que exigem altíssimo desempenho, a análise aprofundada método a método pode representar uma abordagem interessante e as métricas dão um resultado imparcial e baseado em fatos, evitando-se distorções ou falhas humanas no processo.

Além da exibição das métricas em Console, é possível carregar as informações de forma gráfica, mas cabe a demonstração de outros recursos mais avançados em outro artigo, pois este tem apenas carácter introdutório.

Como estamos todos sempre em fase de constante aprendizado, sugestões de melhoria no artigo ou contribuições são sempre muito bem-vindos.

Obrigado por ter lido este artigo até o final. Até mais.

Referências

Linkedin: https://www.linkedin.com/in/alexandremalavasi

Written by

Microsoft MVP | MCP | MCTS | MCPD | ITIL | .NET | MBA | MTAC | Technical Leader | Consultant | .NET Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store