枚举转换的性能

时间:2009-01-24 13:01:22

标签: c# performance enums

经过一点速度跟踪后,我发现了一段代码(非常经常调用),它将一个枚举的值转换为另一个枚举的值,如下所示:

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 个答案:

答案 0 :(得分:5)

字典肯定不会更快。

如果Enum1中的枚举是顺序的,那么Enum2的数组可能会更快(但这可能是边缘的)。如果Enum1接近顺序,那么阵列不会太多,它可能仍然是有用的方法。

对于带有[Flags]属性的枚举,那么切换可能是最好的。

答案 1 :(得分:3)

你确定它是一个僵尸吗?我发现许多分析器报告小方法的时间百分比不正确 在我的计算机中,我可以使用开关在1.7秒内使用10个元素在枚举之间执行100毫秒的转换(Anthony的答案快10倍)。

答案 2 :(得分:1)

这可能取决于你的枚举。对于小型枚举,我希望切换可能是最快的方法,而对于非常大的枚举,字典查找可能会更快。

要获得明确的答案,您必须使用枚举来衡量它。