Requisiti: Nel processo di sviluppo, gli stessi due metodi di funzione possono soddisfare i nostri requisiti, ma per motivi di prestazione sceglieremo il metodo di performance migliore per chiamare, come testare le prestazioni del codice?
Il benchmarking delle prestazioni può aiutare i programmatori a confrontare le prestazioni di due frammenti di codice o metodi, il che può fornire un buon standard di quantificazione per la riscrittura o la rifattorizzazione del codice. Senza benchmark di prestazione, è difficile immaginare come si possa notare la differenza a occhio nudo quando si cambia il metodo A al metodo B.
BenchmarkDotNet è una potente libreria di benchmark di performance .Net sul sito ufficialeIl login del link ipertestuale è visibile.
Per prima cosa, creeremo un nuovo progetto console .NET Core 3.1. Il nome del progetto è: BenchmarkTest
Installa BenchmarkDotNet usando il comando nuget, il codice è il seguente:
Fai doppio clic sul progetto per modificare la piattaforma di destinazione del progetto, come segue:
Testiamo le prestazioni dei metodi TestMD5 e TestSHA1 rispettivamente nei framework .NET Framework 4.7.2 e .NET Core 3.1.
Il codice è il seguente:
Tenta di eseguirlo con il seguente errore:
Convalidazione dei benchmark: Assembly BenchmarkTest, che definisce i benchmark, non è ottimizzato Il benchmark è stato costruito senza ottimizzazione abilitata (molto probabilmente una configurazione DEBUG). Per favore, costruiscilo in RELEASE. Se vuoi fare il debug dei benchmark, consultaIl login del link ipertestuale è visibile.
Passa il progetto in modalità RELEASEPer ricominciare il progetto, come mostrato di seguito:
* Riassunto *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/novembre 2018Aggiornamento/19H2) Intel Core i5-8259U CPU 2.30GHz (Coffee Lake), 1 CPU, 8 core logici e 4 core fisici .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
| Metodo | Lavoro | Durata | Media | Errore | 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 | 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 |
* Suggerimenti * Eccezioni TestContext.TestSHA1: .NET 4.7.2 -> 1 outlier è stato rimosso (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 outlier è stato rimosso (1.37 us)
* Leggende * Media: media aritmetica di tutte le misure Errore: metà dell'intervallo di confidenza del 99,9% StdDev: deviazione standard di tutte le misurazioni Minimo: Minimo Max: Massimo Mediana: Valore che separa la metà superiore di tutte le misurazioni (50° percentile) 1 US : 1 microsecondo (0,000001 seg)
***** BenchmarkRunner: Fine ***** ** Rimaneva 0 benchmark da eseguire ** Durata di esecuzione: 00:01:14 (74 sec), benchmark eseguiti: 4
Tempo totale globale: 00:01:20 (80,63 sec), benchmark eseguiti: 4 * Pulizia manufatti * Una volta eseguiti, i risultati del test vengono salvati nel nostro progetto \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, in csv, html, md e altri formati.
Nota:La selezione del frame target di SimpleJob è errata e potrebbe non essere eseguita correttamenteCome segue:
Non sono riuscito a compilare in parallelo, passando alla build sequenziale
Risorse:Il login del link ipertestuale è visibile.
|