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
Implementare il throttle in JavaScript
Escludere alcuni file da GitHub Copilot
Evitare memory leaks nelle closure JavaScript
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Integrare un servizio esterno con .NET Aspire
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Gestire il routing HTTP in Azure Container App
Introduzione ai web component HTML
Testare il failover sulle region in Azure Storage
Utilizzare i variable font nel CSS
Interagire con Azure DevOps tramite MCP Server
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Le DirectInk API nella Universal Windows Platform
- Sfruttare una CDN con i bundle di ASP.NET
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Gli oggetti CallOut di Expression Blend 4.0
- Inserire le news di Punto Informatico nel proprio sito


