迭代HashSet的最快/最安全的方法是什么?

Myt*_*ics 10 c# iteration performance hashset

我对C#还是很陌生,但是通过论坛帖子注意到在特定情况下使用a HashSet而不是a 的优点List.

我目前的情况并不是说我在一个单独的存储中存储了大量的数据List,而是我不得不经常检查它的成员.

问题在于我确实需要迭代它,但它们存储或检索的顺序实际上并不重要.

我已经读过,因为每个循环实际上比下一个循环慢,所以我怎么能用尽可能快的方法来解决这个问题呢?

.Contains()我正在做的检查数量肯定会损害我的列表性能,因此至少与a的性能相比HashSet会很方便.

编辑:我目前正在使用列表,在多个位置迭代它们,并且在每个位置执行不同的代码.大多数情况下,当前列表包含点坐标,然后我将其用于引用二维数组,然后根据列表的条件执行某些操作或其他操作.

如果我的问题没有直接的答案,那很好,但我认为可能还有其他方法可以迭代HashSet而不仅仅是foreach循环.我目前处于黑暗状态,甚至可能有其他方法,它们提供了哪些优势等等.假设还有其他方法,我还假设有一种典型的首选方法,只有在它不能满足需求(我的需求非常基本).

至于过早优化,我已经知道使用列表,因为我是一个瓶颈.如何解决这个问题是我陷入困境的地方.甚至没有完全卡住,但我不想通过重复测试重新发明轮子只是为了发现我已经尽力而为(这是一个投资超过3个月的大型项目,列表无处不在,但肯定有一些我不想重复,有大量数据,不需要以任何特定顺序存储,等等.

Jas*_*dez 12

foreach循环在索引集合(如数组)上有少量的额外开销.这主要是因为foreach比for循环更多地进行边界检查.

HashSet没有索引器,因此您必须使用枚举器.

在这种情况下,foreach是高效的,因为它只在移动集合时调用MoveNext().

此外,Parallel.ForEach可以显着提高您的性能,具体取决于您在循环中所做的工作以及HashSet的大小.

如前所述,分析是您最好的选择.