Suggerimenti sulle prestazioni .NET.NET Performance Tips

Il termine prestazioni si riferisce in genere alla velocità di esecuzione di un programma.The term performance generally refers to the execution speed of a program. In alcuni casi, è possibile aumentare la velocità di esecuzione seguendo determinate regole di base nel codice sorgente.You can sometimes increase execution speed by following certain basic rules in your source code. In alcuni programmi, è importante esaminare attentamente il codice e usare i profiler per verificare che venga eseguito il più velocemente possibile.In some programs, it is important to examine code closely and use profilers to make sure that it is running as fast as possible. In altri programmi, non è necessario eseguire questa ottimizzazione perché il codice viene eseguito con una velocità ragionevole così com'è scritto.In other programs, you do not have to perform such optimization because the code is running acceptably fast as it is written. In questo articolo sono elencate alcune aree in cui si verificano comunemente problemi di prestazioni e vengono proposti suggerimenti per migliorarle, oltre a collegamenti ad altri argomenti dedicati alle prestazioni.This article lists some common areas where performance can suffer and tips for improving it as well as links to additional performance topics. Per altre informazioni sulla pianificazione e la misurazione delle prestazioni, vedere PrestazioniFor more information about planning and measuring for performance, see Performance

Boxing e unboxingBoxing and Unboxing

È consigliabile evitare l'uso di tipi valore nelle situazioni in cui devono essere sottoposti a conversione boxing un numero elevato di volte, ad esempio nelle classi di raccolte non generiche, come System.Collections.ArrayList.It is best to avoid using value types in situations where they must be boxed a high number of times, for example in non-generic collections classes such as System.Collections.ArrayList. È possibile evitare la conversione boxing di tipi valore usando raccolte generiche, come System.Collections.Generic.List<T>.You can avoid boxing of value types by using generic collections such as System.Collections.Generic.List<T>. Le conversioni boxing e unboxing sono processi onerosi dal punto di vista del calcolo.Boxing and unboxing are computationally expensive processes. Quando un tipo valore viene sottoposto a conversione boxing, è necessario creare un oggetto completamente nuovo.When a value type is boxed, an entirely new object must be created. L'operazione può richiedere fino a 20 volte più tempo rispetto a una semplice assegnazione di riferimento.This can take up to 20 times longer than a simple reference assignment. Durante l'unboxing, il processo di cast può richiedere il quadruplo del tempo rispetto a un'assegnazione.When unboxing, the casting process can take four times as long as an assignment. Per altre informazioni, vedere Boxing e unboxing.For more information, see Boxing and Unboxing.

StringheStrings

Quando si concatena un numero elevato di variabili stringa, ad esempio in un ciclo rigido, usare System.Text.StringBuilder invece dell'operatore + C# o degli operatori di concatenazione di Visual Basic.When you concatenate a large number of string variables, for example in a tight loop, use System.Text.StringBuilder instead of the C# + operator or the Visual Basic Concatenation Operators. Per ulteriori informazioni, vedere come concatenare più stringhe e operatori di concatenazione in Visual Basic.For more information, see How to concatenate multiple strings and Concatenation Operators in Visual Basic.

DistruttoriDestructors

Non usare distruttori vuoti.Empty destructors should not be used. Quando una classe contiene un distruttore, viene creata una voce nella coda Finalize.When a class contains a destructor, an entry is created in the Finalize queue. Quando si chiama il distruttore, viene richiamato Garbage Collector per elaborare la coda.When the destructor is called, the garbage collector is invoked to process the queue. Se il distruttore è vuoto, si verifica semplicemente un calo di prestazioni.If the destructor is empty, this simply results in a loss of performance. Per altre informazioni, vedere Distruttori e Durata degli oggetti: come creare ed eliminare definitivamente oggetti.For more information, see Destructors and Object Lifetime: How Objects Are Created and Destroyed.

Altre risorseOther Resources

Vedere ancheSee also