我对C#中的字典有一般性的疑问.假设我在一个文本文件中读取,将其拆分为键和值并将它们存储在字典中.将它们全部放入单个字典或将其拆分为更小的字典会更有用吗?它可能不会对小文本文件产生巨大影响,但其中一些文件有超过100.000行.你会推荐什么?
我认为原始文章要么不准确,要么已经过时。无论如何,有关“词典大小”的声明已被删除。现在,回答这个问题:
定位为单个字典.NET 6 x64
提供了更好的性能。事实上,使用的字典越多,性能就越差:
| Method | Mean | Error | StdDev | Median |
|-------------- |----------:|---------:|----------:|----------:|
| Dictionary_1 | 91.54 us | 1.815 us | 3.318 us | 89.88 us |
| Dictionary_2 | 122.55 us | 1.067 us | 0.998 us | 122.19 us |
| Dictionary_10 | 390.77 us | 7.757 us | 18.882 us | 382.55 us |
Run Code Online (Sandbox Code Playgroud)
结果应该不足为奇。对于 N 字典查找,您将为每个要查找的项目计算哈希码最多 N 次,而不是只计算一次。此外,您还必须循环遍历字典列表,这会对性能产生微小的影响。总而言之,这是有道理的。
现在,在一些奇怪的情况下,使用 N 字典可能会获得一些速度。例如,考虑一个微小的 CPU 缓存、抖动、哈希码冲突等。不过,还没有遇到这样的场景......
基准代码
| Method | Mean | Error | StdDev | Median |
|-------------- |----------:|---------:|----------:|----------:|
| Dictionary_1 | 91.54 us | 1.815 us | 3.318 us | 89.88 us |
| Dictionary_2 | 122.55 us | 1.067 us | 0.998 us | 122.19 us |
| Dictionary_10 | 390.77 us | 7.757 us | 18.882 us | 382.55 us |
Run Code Online (Sandbox Code Playgroud)