Confronti delle prestazioni tra valutazioni enum e ints
-
03-07-2019 - |
Domanda
Ci sarebbe differenza nella velocità tra
if (myInt == CONST_STATE1)
e
if (myEnum == myENUM.State1)
in c #?
Soluzione
In C # gli enumeratori sono comunque allineati per essere costanti dal compilatore, quindi il vantaggio è la leggibilità del codice
Altri suggerimenti
La cosa a cui bisogna fare attenzione quando si usa Enums non è usare nessuna delle operazioni che richiedono riflessione (o usarle con cura). Ad esempio:
- myEnumValue.ToString ().
- Enum.Parse ()
- Enum.IsDefined ()
- Enum.GetName ()
- Enum.GetNames ()
In caso di costanti, l'opzione di eseguire qualsiasi operazione che richiede riflessione non esiste. Tuttavia, in caso di enumerazioni lo fa. Quindi dovrai stare attento con questo.
Ho visto i report di profilo in cui le operazioni relative alle convalide / riflessioni enum richiedevano fino al 5% del tempo della CPU (uno scenario in cui le convalide enum venivano eseguite su ogni chiamata a un metodo API). Questo può essere notevolmente ridotto scrivendo una classe che memorizza nella cache i risultati del riflesso dei tipi di enum utilizzati.
Detto questo, consiglierei di prendere la decisione di usare enum vs. costante in base a ciò che ha senso dal punto di vista del design . Questo mentre si assicura che il team sia consapevole delle implicazioni in termini di prestazioni delle operazioni che coinvolgono la riflessione.
Inoltre, non sono sicuro che tu debba preoccuparti di questo. Sembra un'ottimizzazione prematura. Sono sicuro che in qualsiasi sistema, ci sono colli di bottiglia più grandi rispetto ai confronti enum. :)