我有一個項目列表,我想遍歷它們的一個子集。現在,我想知道在從列表中刪除不需要的項目之間是否存在性能影響差異,然後通過它循環;或者只是在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