シナリオは次のとおりです。バイナリ シリアル化されたオブジェクトの 2 ~ 3 GB の大きなファイルがあり、各オブジェクトの ID とファイル内のオフセットを含むインデックス ファイルもあります。
指定された一連の ID をメモリにデシリアライズするメソッドを作成する必要があります。パフォーマンスは最も重要なベンチマークであり、メモリ要件を適切に保つことは 2 番目です。
MemoryMappedFile を使用するのが道のりのようですが、大きなファイルを処理する方法が少しわかりません。ファイルが非常に大きいため、ファイル全体の MemoryMappedViewAccessor を作成できません。メモリにあまり影響を与えずに、異なるセグメントのいくつかの MemoryMappedViewAccessor を同時に開いておくことはできますか? その場合、それらのセグメントの大きさはどのくらいですか?
データが頻繁にアクセスされてから破棄される場合、ビューはしばらくメモリに保持される可能性があります
おそらく単純な方法は、オブジェクトをオフセットでフェッチするように注文し、小さなバッファーを使用してオフセットごとに CreateViewAccessor を呼び出すだけです。別の方法は、必要な最小量の異なる MemoryMappedViewAccessor とそのサイズを見つけようとすることです..しかし、CreateViewAccessor を作成する際のオーバーヘッドと、一度に安全にアクセスできるスペースの量がわかりません。私はいくつかのテストを行うことができますが、誰かがより良いアイデアを持っている場合... :)
大きなデータファイルをいくつかに分割する別の方法があると思いますが、この場合、それがうまくいくかどうかはわかりません...