Dot-Net

哪種方法性能更好:.Any() 與 .Count() > 0?

  • November 20, 2008

System.Linq命名空間中,我們現在可以擴展我們的IEnumerable以擁有Any()Count() 擴展方法

最近有人告訴我,如果我想檢查一個集合中是否包含 1 個或多個項目,我應該使用.Any()擴展方法而不是.Count() > 0擴展方法,因為.Count()擴展方法必須遍歷所有項目。

其次,一些集合有一個屬性(不是擴展方法)是Countor Length。使用它們而不是.Any()or會更好.Count()嗎?

是的/不?

如果您從具有.Lengthor的東西開始.Count(例如ICollection<T>, IList<T>,List<T>等) - 那麼這將是最快的選擇,因為它不需要通過檢查非空序列所需的GetEnumerator()//序列.MoveNext()``Dispose()``Any()``IEnumerable<T>

對於 just IEnumerable<T>, then通常Any()會更快,因為它只需要查看一次迭代。但是,請注意,LINQ-to-Objects 的實現確實會檢查(用作優化) - 因此,如果您的基礎數據源直接是列表/集合,則不會有很大的不同。不要問我為什麼不使用非泛型…Count()``ICollection<T>``.Count``ICollection

當然,如果您使用 LINQ 對其進行過濾等(Where等等),您將擁有一個基於迭代器塊的序列,因此這種ICollection<T>優化是無用的。

通常使用IEnumerable<T>: 堅持使用Any();-p

引用自:https://stackoverflow.com/questions/305092