c#yield
キーワード:コレクションイテレーションの最適化
キーワードは、コレクションよりも効率的なイテレーターを作成するための強力なメカニズムを提供します。 これは、コレクションの一部のみを公開することが必要な大きなデータセットまたはシナリオを扱う場合に特に関連します。
yield
yield
の機能
オブジェクトを返すようにします。 このインターフェイスは、yield
ループを使用して繰り返すことができる一連の要素を表します。 重要なことに、IEnumerable
はコレクション全体を一度にメモリにロードする必要はありません。foreach
代わりに、yield
a
ベースのメソッドを繰り返している場合、メソッドはforeach
ステートメントに遭遇するまでのみ実行されます。 その後、降伏値を返し、その実行を一時停止します。 この方法は、次の要素が反復で要求された場合にのみ実行を再開します。 これは基本的に、オンデマンド値を生成する状態マシンです。
yield
yield return
例示的な例
大きなリストから要素をフィルタリングするメソッドを検討してください:
ここで、
は<code class="language-csharp">IEnumerable<object> FilteredList(IList<object> fullList, IList<object> partialList) { foreach (object item in fullList) { if (partialList.Contains(item)) yield return item; } }</code>
の両方に存在する要素のみを返します。 一度に1つの要素を処理し、状態を満たすもののみを生成します。 これにより、メモリに新しい、潜在的に大きくフィルタリングされたリストの作成が避けられます。
FilteredList
fullList
実用的なアプリケーションpartialList
fullList
キーワードでは、で広範な使用が見つかります
yield
カスタムイテレーター:
効率的なデータ取得:
データベースまたはその他の外部ソースからデータを徐々に取得し、メモリの消費を削減し、パフォーマンスを改善します。 データベースから読み取りのこの例を考えてみましょう:このアプローチは、データベースの行を一度に1つずつ取得および処理します。結果セット全体をメモリにロードするよりもはるかに効率的です。
キーワードを活用することにより、開発者は、特に大規模または動的に生成されたデータを扱う場合、コレクションを繰り返すためのエレガントで効率的なソリューションを作成できます。以上がc# `every`キーワードは、コレクションを効率的に繰り返すことをどのように有効にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。