Quando vogliamo misurare le performance di alcune parti del codice di un'applicazione, siamo tentati di utilizzare uno Stopwatch. Questo approccio può essere valido per fare una valutazione iniziale di massima, ma non è molto affidabile quando si vogliono fare misurazioni più vicine alla realtà o comprensive di altre informazioni come la memoria allocata (o altro). Quando vogliamo spingere i test a un livello superiore, possiamo trovare un grande aiuto nella libreria BenchmarkDotNet.
Per fare un esempio, supponiamo di avere a disposizione la classe EncryptionService mostrata nel seguente codice.
public class EncryptionService { public string Encrypt(string input) { ... } public string Decrypt(string input) { ... } }
Per misurare le performance dei metodi Encrypt e Decrypt dobbiamo creare una console application all'interno della quale installiamo tramite NuGet il package BenchmarkDotNet. Successivamente creiamo una classe di test nella quale creiamo i metodi TestEncrypt e TestDecrypt, che invocano i metodi da testare, e li decoriamo con l'attributo Benchmak.
public class Test { [Benchmark] public void TestEncrypt() { var service = new EncryptionService(); service.Encrypt("StringToEncrypt"); } [Benchmark] public void TestDecrypt() { var service = new EncryptionService(); service.Decrypt("StringToDecrypt"); } }
Ora non ci rimane che eseguire i metodi di test. Nel codice di startup della console application usiamo il metodo statico Run della classe BenchmarkRunner passando come parametro generico il nome della classe di test.
var summary = BenchmarkRunner.Run<Test>();
Prima di lanciare la console application, ricordiamoci di impostare la compilazione in modalità Release così da avere dei risultati più vicini possibili alla realtà. Come output, la libreria scrive sulla console i risultati sui tempi di esecuzione dei metodi e sulla deviazione standard così da darci un?idea sui reali tempi di esecuzione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Code scanning e advanced security con Azure DevOps
Generare la software bill of material (SBOM) in GitHub
Ottimizzazione dei block template in Angular 17
Assegnare un valore di default a un parametro di una lambda in C#
Ordine e importanza per @layer in CSS
Disabilitare automaticamente un workflow di GitHub
Testare l'invio dei messaggi con Event Hubs Data Explorer
Usare le navigation property in QuickGrid di Blazor
Gestire domini wildcard in Azure Container Apps
Generare un hash con SHA-3 in .NET
Estrarre dati randomici da una lista di oggetti in C#
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
I più letti di oggi
- Build 2016: segui con noi in live streaming!
- Build 2017: segui con noi tutte le novità mercoledì 10 e giovedì 11 maggio da Seattle!
- Microsoft Visual Studio Code: un nuovo editor gratuito per Windows, MacOSX e Linux per sviluppatori ASP.NET e Node.js
- Usare gRPC come infrastruttura per i nostri servizi web
- Utilizzare QuickGrid di Blazor con Entity Framework
- Realizzare una Progressive Web Application con Blazor e ASP.NET Core
- Abilitare e gestire il prerendering nelle applicazioni Blazor WebAssembly
- ASP.NET 4.5 e Visual Studio 2012 Live - Online
- Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
- Gestire la cancellazione di una richiesta in streaming da Blazor