Сравнение производительности между оценками перечисления и целыми числами
-
03-07-2019 - |
Вопрос
Будет ли разница в скорости между
if (myInt == CONST_STATE1)
и
if (myEnum == myENUM.State1)
в c #?
Решение
В C # перечисления в любом случае встроены компилятором в качестве констант, так что преимущество заключается в удобочитаемости кода
Другие советы
Главное, с чем следует быть осторожным при использовании перечислений, - это не использовать какие-либо операции, требующие отражения (или использовать их с осторожностью).Например:
- MyEnumValue.toString().
- Перечисление.Синтаксический анализ()
- Перечисление.IsDefined()
- Перечисление.getName()
- Перечисление.GetNames()
В случае констант возможности выполнения каких-либо операций, требующих отражения, не существует.Однако в случае перечислений это так и есть.Так что вам придется быть с этим осторожным.
Я видел отчеты профиля, в которых операции, связанные с проверками перечисления / отражениями, занимали до 5% процессорного времени (сценарий, в котором проверки перечисления выполнялись при каждом вызове метода API).Это может быть значительно сокращено путем написания класса, который кэширует результаты отражения используемых типов перечисления.
Сказав это,, Я бы рекомендовал принять решение об использовании enum противконстанта, основанная на том, что имеет смысл с точки зрения дизайна.Это делается для того, чтобы убедиться, что команда осведомлена о влиянии операций, связанных с рефлексией, на производительность.
Кроме того, я не уверен, что вам вообще стоит беспокоиться по этому поводу.Это действительно звучит как преждевременная оптимизация.Я уверен, что в любой системе есть более серьезные узкие места, чем сравнения перечислений.:)