ファイル内の各セクションのオフセットと長さを示すヘッダーを持つセクションに実装されているカスタム ファイル タイプがあります。
現在、ファイルを操作したいときはいつでも、前もって全体をロードして解析するか、必要なセクションだけを選択してロードする必要があります。
私がやりたいことは、各セクションがオンデマンドで読み込まれるハイブリッド アプローチを実現することです。
ただし、これを行うと、ファイルシステムのハンドルを必要以上に開いたままにしておくことや、コードの複雑さが増すという点で、多くの潜在的な欠点があるようです。
この種の標準パターンはありますか?私のオプションは次のようです:
- ファイル全体をロードするだけで、無駄なサイクル/メモリについて不満を言うのをやめます
- ファイル全体を raw バイトとしてメモリにロードし、ディスクではなくメモリ バッファからアンロードされたセクションの要求を満たします。これにより、不要なセクションを解析するコストが節約され、必要なメモリが少なくなります (ディスク表現がその周りのオブジェクト モデルよりもはるかにコンパクトであるため)。
- 必要なセクションをすぐにロードしてファイルを閉じますが、ファイルのソースの場所は保持します。その後、別のセクションが要求された場合は、ファイルを再度開いてデータをロードします。この場合、基になるファイルが変更されると、奇妙な結果が得られる可能性があります。
- 上記と同じですが、ファイル ハンドルを開いたままにします (おそらく読み取り共有を許可します)。
- Memory-Mapped IO を使用してファイルをロードし、ファイルのビューを開いたままにします。
何かご意見は