2009-01-24 54 views
1

的我發現了一段代碼(稱爲非常非常頻繁),它將一個枚舉值到另一個枚舉值,如:性能有點speedtracing後枚舉轉換

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]; 
} 

感謝您的意見!

回答

5

字典絕對不會更快。

如果Enum1中的枚舉是連續的,那麼Enum2的數組可能會更快(但可能是邊際)。如果Enum1接近順序,這樣數組不會太多,它可能仍然是有用的方法。

對於[Flags]屬性的枚舉,那麼交換機可能是最好的。

+0

如果枚舉值接近,優化器就會實現一個跳轉表,所以在這種情況下,交換機也會更好。 (不知道C#/ .NET實際上是否實現了這一點,但它是一種常見的優化) – peterchen 2009-01-24 15:55:25

3

你確定這是一個botteneck?我發現許多配置文件報告小方法的時間百分比不正確。
在我的計算機中,我可以使用開關在1.7秒內在10個元素之間執行100毫秒的轉換(Anthony的答案快10倍)。

1

這可能取決於您的枚舉。對於小枚舉,我希望切換可能是最快的方法,而對於非常大的枚舉,查找字典可能會更快。

要得到一個明確的答案,您將不得不測量它,使用您的枚舉。