假设我们有两个选择:
public static Dictionary<TK, TV> GetDictionary(IEnumerable<TK> keys)
{
var result = new Dictionary<TK, TV>();
...
return result;
}
对比
public static Dictionary<TK, TV> GetDictionary(IEnumerable<TK> keys)
{
var result = new Dictionary<TK, TV>(keys.Count());
...
return result;
}
各有什么优缺点? 最近我们团队发生了争执。
显式大小的可能缺点
- 如果项目数量很少,那就没有意义。
- 如果项目数量很大,则 Count() 的开销很大,并且会导致
IEnumerable
的完整枚举。 - 字典大小调整既有效又快速 - 无需优化。
明确尺寸的可能优点
- 精确的数字可以提高性能,因为调整字典大小的成本很高,最好避免这样做。
什么是更好的选择或者有一些经验法则?
最佳答案
如果您正在处理大量项目并且您在 O(1) 时间内知道这个数字,我会考虑提供 Dictionary
有了这些信息。一般来说,如果预先计算某些东西的成本很低,它可能在某些情况下会产生影响。
因此,就您而言,如果您确实处理大量项目,并且能够提供计数而无需实际枚举所有项目(这就是 Count()
扩展方法的作用),那么请继续。实际上,这意味着您应该至少传递 ICollection<T>
进入你的方法:
public static Dictionary<TK, TV> GetDictionary(ICollection<TK> keys)
{
var result = new Dictionary<TK, TV>(keys.Count);
...
return result;
}
如果您不知道每次需要构造该字典时 O(1) 时间内的计数,那么 just don't spend time optimizing something that's not causing a performance problem .
关于c# - 字典大小显式初始化: pros and cons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785731/