Сравнение производительности между оценками enum и целыми числами - PullRequest
5 голосов
/ 02 января 2009

Будет ли разница в скорости между

if (myInt == CONST_STATE1)

и

if (myEnum == myENUM.State1)

в c #?

Ответы [ 3 ]

11 голосов
/ 02 января 2009

В C # Перечисления в любом случае встроены в константы как константы, поэтому преимущество заключается в удобочитаемости кода

2 голосов
/ 03 января 2009

При использовании Enums следует соблюдать осторожность, чтобы не использовать какие-либо операции, требующие отражения (или использовать их с осторожностью). Например:

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

В случае констант возможность выполнения любых операций, требующих отражения, не существует. Однако, в случае перечислений это так. Поэтому вам нужно быть осторожным с этим.

Я видел профильные отчеты, где операции, связанные с проверками / отражениями перечислений, занимали до 5% процессорного времени (сценарий, когда проверки перечислений выполнялись при каждом вызове метода API). Этого можно значительно уменьшить, написав класс, который кэширует результаты отражения используемых типов перечислений.

Сказав это, Я бы порекомендовал принять решение об использовании enum против константы на основе того, что имеет смысл с точки зрения дизайна . Это делается для того, чтобы команда знала о последствиях для операций, связанных с отражением.

1 голос
/ 03 января 2009

Кроме того, я не уверен, что вам нужно беспокоиться об этом вообще. Это звучит как преждевременная оптимизация. Я уверен, что в любой системе есть более узкие места, чем сравнения перечислений. :)

...