1. ホーム
  2. .net

[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?

2022-03-15 16:58:06

質問

System.Linq 名前空間を拡張することができます。 IEnumerableの を持つようにします。 Any() カウント() 拡張メソッド .

最近、あるコレクションに1つ以上のアイテムが含まれていることを確認したい場合、そのコレクションに含まれるアイテムを確認するために .Any() 拡張メソッドの代わりに .Count() > 0 拡張メソッドは .Count() 拡張メソッドは、すべての項目を繰り返し処理しなければなりません。

次に、いくつかのコレクションは プロパティ (拡張メソッドではない)である Count または Length . の代わりに、それらを使用する方が良いでしょうか? .Any() または .Count() ?

はい / いいえ?

解決方法は?

を持つものから始める場合、その .Length または .Count など ICollection<T> , IList<T> , List<T> など) を経由する必要がないため、これが最も速い選択肢となります。 GetEnumerator() / MoveNext() / Dispose() が必要とするシーケンスです。 Any() をチェックし、空でない IEnumerable<T> の配列になります。

だけの場合 IEnumerable<T> であれば Any() 意志 概ね というのは、1つの反復処理だけを見ればよいからです。しかし、LINQ-to-Objectsの実装である Count() をチェックします。 ICollection<T> (を使用)。 .Count を最適化するために使用します。 直接 リストやコレクションと大きな違いはないでしょう。なぜ、一般的でない ICollection ...

もちろん、LINQを使ってフィルタリングなどをしている場合( Where など)、イテレータ・ブロックベースのシーケンスになるので、この ICollection<T> の最適化は無意味です。

一般に IEnumerable<T> にこだわる。 Any() ;-p