有两个列表
问题是在Myobjects中找到oid属性中具有ObjectID的任何项目。 我很难在LINQ中找到相同的两个“for each”循环。 这应该很容易,但我做错了。在30 000个项目上执行此LINQ需要20秒,并且使用for-each循环在一秒内执行此LINQ。下面是 for-each 循环,我试图使 LINQ (这个很慢)。 Linq解决方案就是我想要的。
For Each i As LengthAreaObject In myobjects
For Each o As ObjectId In oidsToRem
If i.oid = o Then
returnlist.Add(i)
oidsToRem.Remove(o)
Exit For
End If
Next
Next
和LINQ在这里尝试
Dim rlist As List(Of LengthAreaObject) = (From i As LengthAreaObject In myobjects.AsParallel Where oidsToRem.Contains(i.oid) Select i).ToList
答案 0 :(得分:0)
收藏品有多少物品?
对于小型集合,由于额外的方法调用,AsParallel会更慢。
答案 1 :(得分:0)
我找到了类似问题on stackoverflow并对其进行了修改。 因此,加快速度的解决方案仅仅是哈希集合,其中您测试的对象是"包含"。否则,包含很慢!
Dim setToRemove = New HashSet(Of ObjectId)(oidstoRem)
Dim returnlist As List(Of LengthAreaObject) = lengthAreaList.AsParallel.Where(Function(x) setToRemove.Contains(x.oid)).ToList