Domanda

Ci sarebbe differenza nella velocità tra

if (myInt == CONST_STATE1)

e

if (myEnum == myENUM.State1)

in c #?

È stato utile?

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:

  1. myEnumValue.ToString ().
  2. Enum.Parse ()
  3. Enum.IsDefined ()
  4. Enum.GetName ()
  5. 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. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top