次の方法で共有


遅延実行と遅延評価 (LINQ to XML)

クエリと軸の操作は、多くの場合、遅延実行を使用するために実装されます。 この記事では、遅延実行の要件と利点、および実装に関するいくつかの考慮事項について説明します。

遅延実行

遅延実行とは、式の評価が 、実際に実現された 値が必要になるまで遅延されることを意味します。 遅延実行は、大規模なデータ コレクション (特に、一連のチェーンクエリまたは操作を含むプログラム) を操作する必要がある場合に、パフォーマンスを大幅に向上させることができます。 最良のケースでは、遅延実行では、ソース コレクションを 1 回の反復のみが可能になります。

LINQ テクノロジは、コア System.Linq クラスのメンバーと、 System.Xml.Linq.Extensionsなどのさまざまな LINQ 名前空間の拡張メソッドの両方で遅延実行を広範に使用します。

遅延実行は、反復子ブロック内で使用される場合、yield (C# Reference) キーワード (yield-return ステートメントの形式) によって C# 言語で直接サポートされます。 このような反復子は、 IEnumerator 型または IEnumerator<T> 型 (または派生型) のコレクションを返す必要があります。

集中評価とレイジー評価

遅延実行を実装するメソッドを記述するときは、遅延評価と一括評価のどちらを使用してメソッドを実装するかを決定する必要もあります。

  • 遅延評価では、反復子を呼び出すたびに、ソース コレクションの 1 つの要素が処理されます。 これは、反復子を実装する一般的な方法です。
  • 一括評価では、反復子を最初に呼び出すと、コレクション全体が処理されます。 ソース コレクションの一時的なコピーも必要な場合があります。 たとえば、 OrderBy メソッドは、最初の要素を返す前にコレクション全体を並べ替える必要があります。

遅延評価では、通常、コレクションの評価全体にわたってオーバーヘッド処理が均等に分散され、一時データの使用が最小限になるため、パフォーマンスが向上します。 もちろん、一部の操作では、中間結果を具体化する以外の選択肢はありません。

C# および Visual Basic での遅延実行のプログラミングの例については、遅延実行の を参照してください。

こちらも参照ください