【发布时间】:2016-02-07 05:12:08
【问题描述】:
最近,我开始从事一个 C# .NET 项目,该项目需要在内存中保留一个单词字典。
我的第一个方法是创建一个
Dictionary<string, string>
(其中 Key 是单词,Value 是定义)。
效果很好,过了一段时间我决定尝试使用“buckets”并尝试了一个
Dictionary<char, Dictionary<string, string>>
char 是内部字典中单词的第一个字母。
我的问题是:我真的通过应用此更改获得了性能提升吗? (并使代码更复杂)
我知道字典应该是 O(1),所以理论上 5 个单词或 200 万个单词是相同的。通过添加多个级别,我会重复查找时间。
谢谢!
【问题讨论】:
-
从表面上看,这可能会使事情变慢。我建议你自己做一些性能测试来确定。
-
首先,正如@user5151179 指出的那样,找出答案的唯一方法就是实际测量它。其次,也许更重要的是:在考虑优化之前,看看您是否真的有性能问题。
-
Horses 由 Eric Lippert 回答您的问题。如果您仍有问题,请阅读并更新帖子
-
恕我直言字典已经在内部使用了存储桶。在此处查看源代码:referencesource.microsoft.com/#mscorlib/system/collections/…
-
感谢 gdir,这正是我最初的想法,这就是字典的工作方式,具有恒定的访问时间查找表。我不知道字典如何计算要使用的存储桶。也许通过自己做最初的桶,我会“帮助”它。
标签: c# .net performance dictionary optimization