ランダムなオフセットでデータを読み取りたい 20 GB のファイルがあるため、シーケンシャル読み取りではありません。非同期 IO を使用する予定ですが、この制限に気付きました –
私が言ったように、私の要件は、ランダムなオフセットで読み取ることです。ただし、BeginRead API はファイルへのオフセットを取得せず、読み取り先のバッファーへのオフセットのみを取得します (http://msdn.microsoft.com/en-us/library/zxt5ahzw)。
したがって、私の唯一のオプションは FileStream. Seek を使用することです。ただし、それに関する問題は、非同期IOを使用している場合です
FileStream fs = Foo.txt は両方のスレッドで使用されます
Thread 1 Thread 2
fs.Seek(offset1)
(Thread 1 gets preempted)
fs.Seek(offset2)
fs.BeginRead
fs.BeginRead
スレッド 1 がオフセット 1 へのシークの直後にプリエンプトされると、スレッド 1 はオフセット 2 から読み取ることになりますが、これは意図したものではありません。
これは、ロックを使用する必要があるということですか? これは、非同期 IO の目的を無効にします。