哪个更快/更有效:Dictionary <string,object>或Dictionary <enum,object>?

Son*_*Ali 13 c# string enums dictionary

枚举类型更快/更效率比字符串作为字典键使用时的类型?

IDictionary<string,object> or IDictionary<enum,object>
Run Code Online (Sandbox Code Playgroud)

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

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

struct MyKeys
{
   public string Incomplete = "IN"; 
   public string Submitted = "SU"; 
   public string Processing="PR"; 
   public string Completed = "CO"; 
   public string Closed = "CL";   
}
Run Code Online (Sandbox Code Playgroud)

enum MyKeys
{
   Incomplete, 
   Submitted, 
   Processing, 
   Completed, 
   Closed
}
Run Code Online (Sandbox Code Playgroud)

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

Meh*_*ari 14

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

您可以通过使用Dictionary<int, object>和转换enumint或指定自定义比较器来规避比较器问题.

  • 性能方面它可能不是真的(令人惊讶) - http://ayende.com/Blog/archive/2009/02/21/dictionaryltenumtgt-puzzler.aspx (9认同)

Jar*_*Par 5

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

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

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