代码之家  ›  专栏  ›  技术社区  ›  Florian Greinacher

枚举转换的性能

  •  1
  • Florian Greinacher  · 技术社区  · 16 年前

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

    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 回复  |  直到 16 年前
        1
  •  5
  •   AnthonyWJones    16 年前

    字典绝对不会更快。

    如果枚举1中的枚举是连续的,那么枚举2数组可能更快(但这可能是边缘的)。如果enum1接近sequential,这样数组就不会有太多的备用空间,那么它仍然是一种有用的方法。

    对于具有[flags]属性的枚举,则开关可能是最好的。

        2
  •  3
  •   Oleksii G.    16 年前

    你确定这是个僵尸吗?我发现许多分析人员报告了小方法的错误时间百分比。
    在我的电脑里,我可以在1.7秒内用一个开关在10个元素的枚举之间执行100 millons转换(安东尼的答案快10倍)。

        3
  •  1
  •   oefe    16 年前

    这可能取决于你的遗尿。对于小枚举,我希望开关可能是最快的方法,而对于非常大的枚举,字典查找可能更快。

    为了得到一个确定的答案,你必须用你的遗数来测量它。