Share via


Prestazioni (Guida per programmatori C#)

Aggiornamento: Luglio 2008

Il termine prestazioni fa in genere riferimento alla velocità di esecuzione di un programma. È talvolta possibile aumentare la velocità di esecuzione attenendosi a determinate regole nel codice sorgente. In alcuni programmi è importante esaminare attentamente il codice e utilizzare i code profiler per assicurarsi che venga eseguito alla massima velocità possibile. In altri, non è possibile eseguire questa ottimizzazione perché il codice viene eseguito a una velocità accettabile man mano che viene scritto.

Quando si misurano e ottimizzano le prestazioni, attenersi alle linee guida generali illustrate di seguito:

  • Impostare gli obiettivi in termini di prestazioni e misurare le prestazioni del programma per determinare quando il codice non rispetta tali obiettivi.

  • Scrivere il codice in modo che risulti corretto, rispettare i principi di progettazione ed esprimere chiaramente le proprie intenzioni. Eseguire l'ottimizzazione in seguito solo dopo avere stabilito che il codice non raggiunge gli obiettivi delle prestazioni. La lettura e la manutenzione di codice ottimizzato in termini di prestazioni risultano spesso più complesse. È in genere preferibile scrivere codice leggibile e stabile anche se leggermente più lento del codice più ottimizzato che si potrebbe scrivere.

  • Se l'ottimizzazione diventa una necessità, iniziare dalle parti più lente del programma. Se si stabilisce che un programma non raggiunge gli obiettivi in termini di prestazioni, identificare le posizioni specifiche in cui è possibile migliorare le prestazioni e quali sono le cause del problema. Non è in genere consigliabile ottimizzare un metodo chiamato raramente oppure ottimizzare il metodo A in modo che venga eseguito in meno di 50 millisecondi se il programma deve attendere 30 secondi che il metodo B venga eseguito in un altro thread.

Boxing e unboxing

È meglio evitare di utilizzare tipi valore nelle situazioni in cui devono essere sottoposti a boxing un numero elevato di volte, ad esempio in classi di insiemi non generiche come System.Collections.ArrayList. È possibile evitare la conversione boxing di tipi valore tramite insiemi generici come System.Collections.Generic.List<T>. Le operazioni di boxing e unboxing sono processi onerosi dal punto di vista del calcolo. Il boxing di un tipo di valore comporta infatti la creazione di un oggetto completamente nuovo. operazione può essere fino a 20 volte più lunga rispetto a una semplice assegnazione di riferimento. Durante l'unboxing il processo di cast può essere quattro volte più lungo di un'assegnazione. Per ulteriori informazioni, vedere Boxing e unboxing.

Stringhe

Quando si concatena un numero elevato di variabili stringa, ad esempio in un ciclo ridotto, utilizzare System.Text.StringBuilder anziché l'operatore + C#. Per ulteriori informazioni, vedere Procedura: concatenare più stringhe (Guida per programmatori C#).

Distruttori

Non utilizzare distruttori vuoti. Quando una classe contiene un distruttore, viene creata una voce nella coda di finalizzazione. Quando si chiama il distruttore, viene richiamato Garbage Collector per elaborare la coda. Se il distruttore è vuoto, si verifica semplicemente un calo di prestazioni. Per ulteriori informazioni, vedere Distruttori.

Altre risorse

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Protezione (Guida per programmatori C#)

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2008

Aggiunte informazioni alla sezione sulle conversioni boxing e unboxing.

Miglioramento delle informazioni.

Luglio 2008

Aggiunta una sezione sulle stringhe.

Miglioramento delle informazioni.

Luglio 2008

Aggiunte informazioni all'introduzione.

Miglioramento delle informazioni.