ホームページ >バックエンド開発 >C++ >LINQ 拡張メソッドの順序 (Where や FirstOrDefault など) はパフォーマンスに影響しますか?

LINQ 拡張メソッドの順序 (Where や FirstOrDefault など) はパフォーマンスに影響しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-11 10:10:41501ブラウズ

Does the Order of LINQ Extension Methods (e.g., Where and FirstOrDefault) Impact Performance?

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 人が参加しました:

    A はシャッフルされたトランプのデッキを持っています。
  • B は「カードが赤の場合」と書かれたシャツを着ています。
  • C は B に言いました:「最初のカードをください。」
B は、A がレッドカードを提示するまで、繰り返し A にカードを要求します。最初のレッドカードが取得されると、それは C に渡され、プロセスは終了します。 B は、最初のレッドカードを見つけた後、A にカードを要求し続ける必要はありません。

同様に、LINQ ステートメントの

は B に似ており、カード (リスト内の項目) をフィルターして最初に一致するものを見つけます。最初の一致を返す前に、すべての一致を検索する必要はありません。 Where

一方、拡張メソッドの順序が逆で、

の後に FirstOrDefault が続く場合は、状況が異なります。 Where は最初の項目を取得する必要があり、次に FirstOrDefault はそのフィルターを適用する必要があります。これには、すべての項目のループが含まれます。これは、Where の後に Where を続けるよりも効率が低くなります。 FirstOrDefault

したがって、LINQ 拡張メソッドのパフォーマンスへの影響を判断するときは、使用する特定のメソッドに応じて操作の効率に影響を与えるため、それらの適用順序を考慮することが重要です。

以上がLINQ 拡張メソッドの順序 (Where や FirstOrDefault など) はパフォーマンスに影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。