Производительность преобразования enum - PullRequest
1 голос
/ 24 января 2009

после небольшой скоростной трассировки я нашел фрагмент кода (который вызывается очень часто), который преобразует значения одного перечисления в значения другого перечисления, например:

public Enum2 ConvertToEnum2(Enum1 enum1)
{
   switch(enum1)
   {
      case Enum1.One:
         return Enum2.One;
         break;
      case Enum1.Two:
         return Enum2.Two;
         break;
   }
}

Будет ли мне более продуктивно, если я сохраню эти преобразования в словаре и просто сделаю что-то вроде этого:

public Enum2 ConvertToEnum2(Enum1 enum1)
{
   return m_ConversionTable[enum1];
}

Спасибо за ваши комментарии!

Ответы [ 3 ]

5 голосов
/ 24 января 2009

Словарь определенно не будет быстрее.

Если перечисления в Enum1 являются последовательными, то массив Enum2, вероятно, будет быстрее (но это может быть незначительным). Если Enum1 близок к последовательному, так что массив не слишком щадящий, это может быть полезным подходом.

Для перечисления с атрибутом [Flags] переключатель, вероятно, является лучшим.

3 голосов
/ 24 января 2009

Вы уверены, что это боттенек? Я обнаружил, что многие профилировщики сообщают о неправильных процентах времени для небольших методов.
На моем компьютере я могу выполнить 100-миллионные преобразования между перечислениями с 10 элементами за 1,7 секунды, используя переключатель (ответ Энтони в 10 раз быстрее)

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

Это, вероятно, будет зависеть от ваших перечислений. Для небольших перечислений, я ожидаю, что переключение, вероятно, самый быстрый метод, в то время как для очень больших перечислений поиск в словаре может быть быстрее.

Чтобы получить окончательный ответ, вы должны измерить его, используя свои перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...