As comparações de desempenho entre as avaliações ENUM e ints
-
03-07-2019 - |
Pergunta
haveria diferença de velocidade entre
if (myInt == CONST_STATE1)
e
if (myEnum == myENUM.State1)
em c #?
Solução
em C # Enums estão em-alinhado para ser constantes pelo compilador de qualquer maneira, de modo que o benefício é código legibilidade
Outras dicas
A única coisa a ser cuidadoso sobre quando usar Enums é não usar qualquer uma das operações que exigem reflexão (ou usá-los com cuidado). Por exemplo:
- myEnumValue.ToString ().
- Enum.Parse ()
- Enum.IsDefined ()
- Enum.GetName ()
- Enum.GetNames ()
No caso de constantes a opção de fazer qualquer operação que exija reflexão não existe. No entanto, em caso de enums ele faz. Então você terá que ter cuidado com isso.
Eu vi relatórios de perfil, onde as operações relativas a validações enum / reflexões levaram até 5% do tempo da CPU (um cenário onde validações enum foram feitas em cada chamada para um método de API). Isso pode ser bastante reduzido, escrevendo uma classe que armazena em cache os resultados da reflexão dos tipos de enum a ser utilizado.
Dito isto, Eu recomendaria tomar a decisão de usar enumeração vs. constante com base no que faz sentido do ponto de vista do design . Isto é, enquanto certificando-se de que a equipe está ciente das implicações das operações que envolvem reflexão desempenho.
Além disso, eu não tenho certeza de que você precisa se preocupar com isso em tudo. Ele soa como otimização prematura. Tenho certeza de que em qualquer sistema, existem maiores gargalos do que comparações enum. :)