Requisitos: No processo de desenvolvimento, os mesmos dois métodos funcionais podem atender aos nossos requisitos, mas por razões de desempenho, escolheremos o melhor método de desempenho para chamar como testar o desempenho do código?
Benchmarking de desempenho pode ajudar programadores a comparar o desempenho de dois trechos de código ou métodos, o que pode fornecer um bom padrão de quantificação para reescrita ou refatoração de código. Sem benchmarks de desempenho, é difícil imaginar como você consegue perceber a diferença de desempenho a olho nu ao trocar o método A para o método B.
BenchmarkDotNet é uma poderosa biblioteca de benchmarks de desempenho .Net no site oficialO login do hiperlink está visível.
Primeiro, vamos criar um novo projeto de console .NET Core 3.1. O nome do projeto é: BenchmarkTest
Instale o BenchmarkDotNet usando o comando nuget, o código é o seguinte:
Clique duas vezes no projeto para modificar a plataforma alvo do projeto, da seguinte forma:
Testamos o desempenho dos métodos TestMD5 e TestSHA1 sob os frameworks .NET Framework 4.7.2 e .NET Core 3.1, respectivamente.
O código é o seguinte:
Tente executá-lo com o seguinte erro:
Validando benchmarks: Assembly BenchmarkTest, que define benchmarks, não é otimizado O benchmark foi construído sem otimização ativada (provavelmente uma configuração DEBUG). Por favor, construa isso no RELEASE. Se você quiser depurar os benchmarks, por favor, vejaO login do hiperlink está visível.
Mudar o projeto para o modo LANÇAMENTOPara recomeçar o projeto, como mostrado abaixo:
* Resumo *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/Novembro2018Atualização/19H2) Intel Core i5-8259U CPU 2.30GHz (Coffee Lake), 1 CPU, 8 núcleos lógicos e 4 físicos .NET Core SDK=5.0.103 [Host]: .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT .NET 4.7.2 : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT .NET Core 3.1 : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT
| Método | Job | Duração | Média | Erro | StdDev | Min | Max | Mediana | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 US | 0.0804 us | 0.1045 us | 3.958 US | 4.318 US | 4.123 US | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 us | 0.0793 us | 0.1085 us | 3.926 US | 4.289 EUA | 4.003 US | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 US | 0,0122 us | 0.0114 us | 1.202 EUA | 1.238 US | 1.214 US | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 US | 0.0186 us | 0.0165 us | 1.284 US | 1.336 US | 1.307 US |
* Dicas * Casos atípicos TestContext.TestSHA1: .NET 4.7.2 -> 1 outlier foi removido (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 outlier foi removido (1.37 us)
* Lendas * Média: Média aritmética de todas as medições Erro: Metade do intervalo de confiança de 99,9% StdDev: Desvio padrão de todas as medições Mínimo: Mínimo Max: Máximo Mediana: Valor separando a metade superior de todas as medições (percentil 50) 1 EUA : 1 microsegundo (0,000001 seg)
***** BenchmarkRunner: Fim ***** ** Permaneceu 0(s) benchmark(s) para rodar ** Tempo de execução: 00:01:14 (74 seg), benchmarks executados: 4
Tempo total global: 00:01:20 (80,63 seg), benchmarks executados: 4 * Limpeza de artefatos * Uma vez executados, os resultados do teste são salvos em nosso projeto \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artefacts\results, na pasta csv, html, md e outros formatos.
Nota:A seleção de frame-alvo do SimpleJob está incorreta e pode não ser executada corretamenteComo segue:
Falhei em construir no modo Paralelo, mudando para build sequencial
Recursos:O login do hiperlink está visível.
|