LINQ 拡張メソッドの順序
質問元: LINQ 拡張メソッドの順序はパフォーマンスに影響しますか?
質問:
LINQ 拡張メソッドの順序がパフォーマンスに大きな影響を与えないのはなぜですか?たとえば、次の 2 つのステートメントを比較すると、Where
の後に FirstOrDefault
が続く方が、FirstOrDefault
の後に Where
が続くよりも遅いと思われるかもしれません。
<code class="language-csharp">hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault(); hugeList.FirstOrDefault(x => x.Text.Contains("10000"));</code>
答え:
の後に Where
が続くという仮定は間違っています。 FirstOrDefault
最初の一致を取得する前に、すべての一致を検索する必要はありません。オンデマンドで一致を取得します。つまり、最初の一致のみが必要な場合は、最初の一致が見つかった後に停止します。 Where
3 人が参加しました:B は、A がレッドカードを提示するまで、繰り返し A にカードを要求します。最初のレッドカードが取得されると、それは C に渡され、プロセスは終了します。 B は、最初のレッドカードを見つけた後、A にカードを要求し続ける必要はありません。
A はシャッフルされたトランプのデッキを持っています。
- B は「カードが赤の場合」と書かれたシャツを着ています。
- C は B に言いました:「最初のカードをください。」
同様に、LINQ ステートメントの
は B に似ており、カード (リスト内の項目) をフィルターして最初に一致するものを見つけます。最初の一致を返す前に、すべての一致を検索する必要はありません。 Where
の後に FirstOrDefault
が続く場合は、状況が異なります。 Where
は最初の項目を取得する必要があり、次に FirstOrDefault
はそのフィルターを適用する必要があります。これには、すべての項目のループが含まれます。これは、Where
の後に Where
を続けるよりも効率が低くなります。 FirstOrDefault
以上がLINQ 拡張メソッドの順序 (Where や FirstOrDefault など) はパフォーマンスに影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。