假设我有一些枚举。例如
enum MyEnum
{
Item1,
Item2,
Item3
}
我想为枚举中的每个项目“缓存”一些东西。所以我有两个选择。
字典选项:
Dictionary<MyEnum, /*someStructure*/> cache = new Dictionary<MyEnum, /*someStructure*/>>();
或数组选项:
/*someStructure*/[] cache = new /*someStructure*/[Enum.GetValues(typeof(MyEnum)).Length]
每个选项的优缺点是什么?在我看来Dictionary
选项更具可读性和易用性,但比 Array
慢选项。
但会Dictionary
实际上会更慢?大概 Dictionary
是“聪明”到足以理解当enum
用作键,那么仅“数组”就可以用作底层实现?
所以问题是 - “丑陋的 array
选项”会比“简单的”Dictionary
更快吗?选项?好吧,也许我可以测试一下……但现在当我写完问题后,我想知道其他人的想法。
最佳答案
Dictionany<TKey, TValue>
不是“智能”并且不会针对任何给定的键进行优化。底层实现始终相同。
但是,关于性能,使用enum
values as key in dictionary 比您预期的要慢得多,并且比存储 Int32
慢得多慢作为关键。这是因为运行时在调用 GetHashCode()
时使用大量反射来获取枚举的哈希码。 .如果实际上发现这很奇怪。
但是当最具可读性的方法(使用枚举作为字典中的键)足够快时,所有这些都无关紧要。这里没有人可以为您回答这个问题。你必须测量这个。不要过早地进行优化并使用最易读/可维护的代码,直到证明该解决方案对于您的情况而言不够快(它可能会如此)。
但是,不要切换到数组,而是尝试切换到带有 Int32
的字典。键:
var dictionary = new Dictionary<int, /*someStructure*/>();
dictionary[(int)MyEnum.Item1] = /*new someStructure()*/;
关于c# - 将枚举存储在数组中 VS 存储在字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429779/