哪个更快/更有效:Dictionary 或Dictionary ?

当用作字典键时, 枚举类型是否比字符串类型更快/更有效?

IDictionary or IDictionary 

事实上,哪种数据类型最适合作为字典键,为什么?

请考虑以下事项: 注意:为简单起见,只有5个属性

 struct MyKeys { public string Incomplete = "IN"; public string Submitted = "SU"; public string Processing="PR"; public string Completed = "CO"; public string Closed = "CL"; } 

 enum MyKeys { Incomplete, Submitted, Processing, Completed, Closed } 

如果在字典中用作键,上面哪个会更好!

当然, enum版本更好(当两者都适用时,当然有意义)。 不仅仅是为了性能(可能更好或更糟,请参阅Rashack的非常好的评论),因为它检查了编译时间并产生更清晰的代码。

您可以通过使用Dictionary并将enum键转换为int或指定自定义比较器来绕过比较器问题。

我认为你应该首先关注正确性。 这比程序中可能出现的次要性能差异之间的最小差异重要得多。 在这种情况下,我将专注于您的类型的正确表示(枚举似乎是最好的)。 然后稍后对您的应用程序进行概要分析,如果出现问题,那么只有这样才能修复它。

在此过程中稍后加快代码通常是一个简单的过程。 获取skolima提供的链接。 如果您选择了枚举,那么在应用程序中删除潜在的性能问题大概需要10分钟。 我想在这里强调潜力这个词。 对于NHibernate来说这肯定是一个问题,但是对于你的程序来说它是否会成为问题将完全取决于用途。

另一方面,在过程的后期使代码更正确往往更加困难。 在一个足够大的问题中,你会发现人们开始依赖于先前不良行为的副作用。 这可以在不破坏其他组件的情况下纠正代码。

使用枚举来获得更清晰,更好的代码,但如果您关注性能,请记得提供自定义比较器: http : //ayende.com/Blog/archive/2009/02/21/dictionaryltenumtgt-puzzler.aspx 。

可能不适用但……

请注意,枚举被编译为常量 ,这可能会导致重新部署引用枚举的所有程序集(如果已更改)。 (即,常量在编译时硬编码到使用它的所有程序集)。

我猜想枚举版本更快。 在引擎盖下,字典通过哈希码引用所有内容。 我的猜测是,为字符串生成哈希码的速度较慢。 然而,这可能是可以忽略的慢,并且肯定比字符串比较更快。 我同意其他海报的说法,说枚举更清洁。