Question

Y aurait-il une différence de vitesse entre

if (myInt == CONST_STATE1)

et

if (myEnum == myENUM.State1)

en c #?

Était-ce utile?

La solution

En C #, les énumérations sont définies pour être des constantes par le compilateur, l’avantage est donc la lisibilité du code

Autres conseils

La chose à laquelle il faut faire attention en utilisant Enums est de ne pas utiliser les opérations nécessitant une réflexion (ou de les utiliser avec précaution). Par exemple:

  1. myEnumValue.ToString ().
  2. Enum.Parse ()
  3. Enum.IsDefined ()
  4. Enum.GetName ()
  5. Enum.GetNames ()

Dans le cas de constantes, l'option permettant d'effectuer des opérations nécessitant une réflexion n'existe pas. Cependant, en cas d’énumération, c’est le cas. Vous devrez donc faire attention à cela.

J'ai vu des rapports de profil dans lesquels les opérations relatives aux validations / réflexions d'énumération prenaient jusqu'à 5% du temps CPU (scénario dans lequel des validations d'énumération étaient effectuées à chaque appel d'une méthode API). Cela peut être grandement réduit en écrivant une classe qui met en cache les résultats de la réflexion des types d’énum utilisés.

Cela dit, je recommanderais de prendre la décision d'utiliser enum vs constante en fonction de ce qui est logique du point de vue de la conception . Ceci tout en vous assurant que l’équipe est consciente des conséquences en termes de performances des opérations impliquant une réflexion.

De plus, je ne suis pas sûr que vous ayez à vous inquiéter de cela. Cela ressemble à une optimisation prématurée. Je suis sûr que dans tout système, les goulots d'étranglement sont plus importants que les comparaisons enum. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top