Pregunta

¿Habría diferencias en la velocidad entre

if (myInt == CONST_STATE1)

y

if (myEnum == myENUM.State1)

en c #?

¿Fue útil?

Solución

En C # Las enumeraciones están alineadas para ser constantes por el compilador de todos modos, por lo que el beneficio es la legibilidad del código

Otros consejos

Lo que hay que tener cuidado al usar Enums es no usar ninguna de las operaciones que requieren reflexión (o usarlas con cuidado). Por ejemplo:

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

En el caso de constantes, la opción de realizar cualquier operación que requiera reflexión no existe. Sin embargo, en caso de enums lo hace. Así que tendrás que tener cuidado con esto.

He visto informes de perfil donde las operaciones relacionadas con las validaciones / reflexiones de enumeración tomaron hasta el 5% del tiempo de CPU (un escenario donde se realizaron validaciones de enumeración en cada llamada a un método de API). Esto se puede reducir considerablemente escribiendo una clase que almacene en caché los resultados de la reflexión de los tipos de enumeración que se están utilizando.

Habiendo dicho eso, recomendaría tomar la decisión de usar enumeración vs. constante en función de lo que tenga sentido desde el punto de vista del diseño . Esto es al mismo tiempo que se asegura de que el equipo esté consciente de las implicaciones de rendimiento de las operaciones que involucran la reflexión.

Además, no estoy seguro de que debas preocuparte por esto. Suena como una optimización prematura. Estoy seguro de que en cualquier sistema, hay cuellos de botella más grandes que las comparaciones de enumeración. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top