loading experience

.NET

Prestazioni in .NET 10: cosa migliora nel runtime

Allocazione sullo stack, devirtualizzazione e cicli ottimizzati: perché lo stesso codice gira più veloce senza modifiche.

Prestazioni in .NET 10: cosa migliora nel runtime

Ogni versione di .NET porta miglioramenti di prestazioni "gratuiti": aggiorni il target framework e il codice esistente diventa più veloce. .NET 10 non fa eccezione.

Ogni passaggio riduce allocazioni o chiamate indirette nel codice esistente.
Ogni passaggio riduce allocazioni o chiamate indirette nel codice esistente.

Meno allocazioni sull'heap

Il JIT analizza meglio se un oggetto "esce" dal metodo che lo crea. Quando un piccolo oggetto, un array di dimensione fissa o un delegate restano locali, il JIT può allocarli sullo stack invece che sull'heap: meno lavoro per il garbage collector e meno pause.

Chiamate più dirette

La devirtualizzazione trasforma chiamate attraverso interfacce in chiamate dirette quando il tipo concreto è noto, aprendo la strada all'inlining. In .NET 10 questo vale anche per molti metodi di interfaccia degli array, molto usati nei cicli foreach su collezioni.

Cicli e istruzioni moderne

Il compilatore riorganizza meglio i cicli, elimina controlli dei limiti ridondanti e sfrutta le istruzioni vettoriali delle CPU recenti, comprese le estensioni AVX10 su x64 e le istruzioni SVE su Arm64.

Come verificarlo sul tuo codice

Non fidarti delle sensazioni: misura. Un benchmark ripetibile prima e dopo l'aggiornamento ti dice esattamente quanto guadagni.

[MemoryDiagnoser]
public class SommaBenchmark
{
    private readonly int[] _dati = Enumerable.Range(0, 10_000).ToArray();

    [Benchmark]
    public int Somma()
    {
        var totale = 0;
        foreach (var n in _dati) totale += n;
        return totale;
    }
}

Esegui lo stesso benchmark con net8.0 e net10.0 come target e confronta tempi e allocazioni: è il modo più onesto per decidere se e quanto conviene migrare.

Commenti (0)

Nessun commento ancora.

Lascia un commento