Сравнение производительности между оценками перечисления и целыми числами

StackOverflow https://stackoverflow.com/questions/406700

  •  03-07-2019
  •  | 
  •  

Вопрос

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

if (myInt == CONST_STATE1)

и

if (myEnum == myENUM.State1)

в c #?

Это было полезно?

Решение

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

Другие советы

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

  1. MyEnumValue.toString().
  2. Перечисление.Синтаксический анализ()
  3. Перечисление.IsDefined()
  4. Перечисление.getName()
  5. Перечисление.GetNames()

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top