我有一个项目列表,我想遍历它们的一个子集。现在,我想知道在从列表中删除不需要的项目之间是否存在性能影响差异,然后通过它循环;或者只是在for循环中过滤列表。.RemoveAll和.Where之间的性能差异在C#中
这里是一个例子。
的removeall过的做法:
list.RemoveAll(o => !someOtherList.Contains(o.Property));
foreach (var i in list)
{
}
在哪里做法:
foreach (var i in list.Where(o => someOtherList.Contains(o.Property))
{
}
据我所知,第一种方法实际上是要处理的是在列表,作为第二个则不会。这并不是真的关心我。我更关心的是第二种方法中的过滤器是否应用于每次迭代,或者C#是否足够聪明以创建子集并且仅循环该子集(几乎就像使用临时变量的第一种方法)。
如果您的问题归结为“someOtherList.Contains'会被调用多少次?”,我强烈怀疑这两个示例的答案是相同的。 –
哪一个更快?运行两次1000次并计算平均值! – user3185569
@Damien_The_Unbeliever:我的问题归结为多少次list.Where将被调用。 – Johannes