var usedIds = list.Count > 20 ? new HashSet<int>() as ICollection<int> : new List<int>();
假设 List 在 20 个或更少的项目中性能更高,而 HashSet 在项目数量更大时性能更高(来自 this 帖子),基于可预测的项目计数动态使用不同集合类型是否有效?
每种集合类型的所有操作都是相同的。
PS:我还发现了HybridCollection类似乎自动执行相同的操作,但我从未使用过它,所以我也没有有关其性能的信息。
编辑:我的集合主要用作具有许多插入和获取的缓冲区。
最佳答案
理论上,可能是这样,具体取决于您对集合执行的操作数量和类型。实际上,这种微观优化证明增加复杂性是合理的情况非常罕见。
还要考虑您正在使用的数据类型。如果您按照问题第一行的建议使用 int
作为集合项,那么阈值将远小于 20,其中 List
不再对于许多操作来说,比 HashSet
更快。
无论如何,如果您要这样做,我将创建一个新的集合类来处理它,类似于 HybridDictionary 的内容。 ,并使用 IDictionary 等通用接口(interface)将其公开给您的用户代码。
并确保对其进行概要分析,以确保您的用例确实能从中受益。
甚至可能有比这两个集合更好的选择,具体取决于您到底在做什么。即,如果您在“之前或之后”进行了大量插入和遍历,那么 LinkedList可能更适合您。
关于c# - List<T> 与 HashSet<T> - 动态集合选择是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846062/