Leistungsvergleiche zwischen Enum Auswertungen und Ints
-
03-07-2019 - |
Frage
Würde es Geschwindigkeitsdifferenz zwischen
sein
if (myInt == CONST_STATE1)
und
if (myEnum == myENUM.State1)
in c #?
Lösung
In C # Aufzählungen sind in ausgekleideten Konstanten durch den Compiler ohnehin zu sein, so dass der Nutzen Code Lesbarkeit ist
Andere Tipps
Die Sache vorsichtig zu sein, wenn Aufzählungen verwenden, ist keine der Operationen zu verwenden, die Reflexion erfordern (oder sich mit Sorgfalt verwenden). Zum Beispiel:
- myEnumValue.ToString ().
- Enum.Parse ()
- Enum.IsDefined ()
- Enum.GetName ()
- Enum.GetNames ()
Bei Konstanten die Möglichkeit, alle Vorgänge zu tun, die Reflexion erfordert nicht vorhanden. Doch im Fall von Aufzählungen tut es. So werden Sie mit diesem vorsichtig sein.
Ich habe Profil Berichte gesehen, in denen Operationen Enum Validierungen im Zusammenhang / Reflexionen zu 5% der CPU-Zeit in Anspruch nahmen (ein Szenario, in dem ENUM-Validierungen auf jedem Aufruf eine API-Methode durchgeführt wurden). Dies kann erheblich reduziert werden, indem er eine Klasse, die die Ergebnisse der Reflexion der Aufzählungstypen Caches verwendet wird.
Having said that, Ich würde empfehlen, die Entscheidung zu treffen, mit Enum vs. Konstante auf, was Sinne von einer Design-Sicht macht . Dies ist gleichzeitig aber dafür sorgen, dass das Team der Auswirkungen auf die Leistung der Operationen bewusst ist beteiligt Reflexion.
Auch ich bin nicht sicher, dass Sie über diese überhaupt besorgt sein müssen. Es klingt wie vorzeitige Optimierung. Ich bin sicher, dass in jedem System gibt es größere Engpässe als ENUM-Vergleiche. :)