Requisitos: En el proceso de desarrollo, los mismos dos métodos de funciones pueden cumplir nuestros requisitos, pero por razones de rendimiento, elegiremos el mejor método de rendimiento para llamar, ¿cómo probar el rendimiento del código?
El benchmarking de rendimiento puede ayudar a los programadores a comparar el rendimiento de dos fragmentos de código o métodos, lo que puede proporcionar un buen estándar de cuantificación para la reescritura o refactorización de código. Sin benchmarks de rendimiento, es difícil imaginar cómo puedes notar la diferencia de rendimiento a simple vista cuando cambias el método A al método B.
BenchmarkDotNet es una potente biblioteca de benchmarks de rendimiento .Net en la web oficialEl inicio de sesión del hipervínculo es visible.
Primero, crearemos un nuevo proyecto de consola .NET Core 3.1. El nombre del proyecto es: BenchmarkTest
Instala BenchmarkDotNet usando el comando nuget, el código es el siguiente:
Haz doble clic en el proyecto para modificar la plataforma objetivo del proyecto, de la siguiente manera:
Probamos el rendimiento de los métodos TestMD5 y TestSHA1 bajo los frameworks .NET Framework 4.7.2 y .NET Core 3.1, respectivamente.
El código es el siguiente:
Intenta ejecutarlo con el siguiente error:
Validación de benchmarks: Assembly BenchmarkTest, que define benchmarks, no está optimizado El benchmark se construyó sin optimización activada (probablemente una configuración DEBUG). Por favor, inclúyelo en RELEASE. Si quieres depurar los benchmarks, por favor consultaEl inicio de sesión del hipervínculo es visible.
Cambiar el proyecto a modo LANZAMIENTOPara empezar el proyecto de nuevo, como se muestra a continuación:
* Resumen *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/November2018Update/19H2) CPU Intel Core i5-8259U 2,30GHz (Coffee Lake), 1 CPU, 8 núcleos lógicos y 4 físicos .NET Core SDK=5.0.103 [Anfitrión]: .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 | Duración | Media | Error | 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 US | 4.003 US | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 US | 0.0122 US | 0.0114 US | 1.202 US | 1.238 US | 1.214 US | | TestSHA1 | .NET Core 3.1 | 1.307 US | 0.0186 US | 0.0165 US | 1.284 US | 1.336 US | 1.307 US |
* Pistas * Casos atípicos TestContext.TestSHA1: .NET 4.7.2 -> 1 acaso fue eliminado (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 fue eliminado el valor atípico (1.37 us)
* Leyendas * Media: media aritmética de todas las mediciones Error: La mitad del intervalo de confianza del 99,9% Desarrollo Estándar: desviación estándar de todas las mediciones Mínimo: Mínimo Max: Máximo Mediana: Valor que separa la mitad superior de todas las mediciones (percentil 50) 1 EE. UU. : 1 microsegundo (0,000001 seg)
***** BenchmarkRunner: Fin ***** ** Se mantuvo 0 benchmark por ejecutar ** Duración: 00:01:14 (74 seg), benchmarks ejecutados: 4
Tiempo total global: 00:01:20 (80,63 seg), benchmarks ejecutados: 4 * Limpieza de artefactos * Una vez ejecutados, los resultados de la prueba se guardan en nuestra carpeta del proyecto \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, en csv, html, md y otros formatos.
Nota:La selección de tramas objetivo de SimpleJob es incorrecta y puede no ejecutarse correctamenteComo sigue:
No se pudo compilar en paralelo, cambiando a compilación secuencial
Recursos:El inicio de sesión del hipervínculo es visible.
|