linq クエリでガベージ コレクションがどのように処理されるかについて質問があります。処理するリクエストのリストが与えられたとします。各リクエストは非常に大量のデータ セットを生成しますが、フィルタが適用されて、リクエストされた各ロードからの重要なデータのみが保持されます。
//Input data
List<request> requests;
IEnumerable<filteredData> results = requests.Select(request => Process(request)).Select(data => Filter(data));
したがって、フィルター処理された各データ項目が要求されるまで、データ項目ごとにクエリが延期されることがわかっているので、それで問題ありません。しかし、その中間のメモリ集約型の部分は、列挙型が完了するまで持続しますか?
私が望んでいるのは、各データ要素がフィルタリングされた段階を通過するとすぐにガベージコレクションできることです。これにより、リスト全体を処理するのに十分なメモリがあることを確認できます。これは事実ですか、それとも、クエリ全体が終了するまで、中央の列挙型がすべてを保持しますか? もしそうなら、これに対処するlinqの方法はありますか?
注: Process() 関数は、メモリ集約型のデータを生成します...それが私が心配していることです