遅延評価は、一度にメイン メモリに収まらない巨大なファイルを処理するようなものに大きな恩恵をもたらします。ただし、シーケンスにすぐに評価したい要素がいくつかあり、残りは遅延計算できるとします-それを指定する方法はありますか?
具体的な問題: (質問への回答に役立つ場合)
具体的には、一連の IEnumerables を複数のシーケンスの反復子として使用しています。これらのシーケンスは、BinaryReader ストリームを使用して開かれたファイルから読み取られたデータです (各シーケンスは、ファイルの 1 つからのデータの読み取りを担当します)。これらの MoveNext() は、特定の順序で呼び出されます。例えば。iter0
それiter1
から....などiter5
。iter3
この順序は、別のシーケンスindex
=で指定されます{0,1,5,3,....}
。ただし、シーケンスは遅延しているため、当然、必要な場合にのみ評価が行われます。したがって、シーケンスの IEnumerables が移動しているときに、ファイルの読み取り (ディスク上のファイルから読み取る最初のシーケンスの場合) が発生します。これにより、不正なファイル アクセスが発生しています。1 つのプロセスによって読み取られているファイルが、(エラー メッセージに従って) 再度アクセスされます。
確かに、不正なファイル アクセスは他の理由による可能性があります。他の原因をデバッグするために最善を尽くした後、部分的な遅延評価を試してみる価値があるかもしれません。