c# - List<T> 与 HashSet<T> - 动态集合选择是否有效?

标签 c# performance

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/

相关文章:

performance - 确定两个列表是否包含相同的数字项而不进行排序

c# - 在 ReflectionOnly 模式下将程序集加载到新的 AppDomain 时,方法没有实现

C#:使用 ListView.SelectedItems[0] 后选择不同项目的问题

c# - 没有端点在 https ://监听

c# - 您如何平衡框架/API 设计和 TDD

c# - 设置响应 ContentType 的中间件

sql-server - 数据库表什么时候变得足够大以至于索引有用?

performance - 使用可见与从舞台添加/删除时的内存使用+性能

java - 实现更有效的矩阵 - 使用数组数组(二维)或一维数组?

java - 使用 REST 调用将本地对象的范围与服务器对象进行匹配