他のファイルを組み合わせたり編集したりして大きなファイルを作成するアプリケーションを想像してみてください。例えば 、アプリケーション:.NETアプリケーションの大容量メモリブロック。それらを処理する最適/推奨/スケーラブルな方法は何ですか?
- が
- は追加画像のアーカイブを開くか、
- が
- は画像 の結果セットで新しいアーカイブを作成し、既存の画像の一部を変更した画像の一部を置き換えます
イメージの追加/置換/変更は任意の順序で行うことができるため、実行の最後まで新しいアーカイブを作成することはできません。
元のアーカイブ内の各画像に対してMemoryStream
オブジェクトのセットを作成し、必要に応じてストリームを変更/削除/置き換えて、新しいアーカイブに書き込むことは賢明な方法です。そのようなアプローチはおそらく実行速度に関して最良の結果を与えるでしょう。
問題は明らかです。一連のストリームを保持するためのメモリが必ずしも十分ではありません。
この場合、あなたは何をお勧めしますか?
私はメモリのためのいくつかのスピードを交換し、一時的なオフメモリストレージのいくつかの種類を使用する必要がありますね。私は何を使うべきか分からない。
メモリマップファイルを使用する必要がありますか?または、それらの作成と削除のための何らかの仕組みを持つ普通の古い一時ファイル?多分何か?
パフォーマンス要件はありますか?私は単純な一時ファイル(多くの小さなファイルの減速を避けるためにネストされた構造に格納されている可能性があります)のために移動し、そこから開始することに誘惑されます。適切なインターフェースの背後に隠れていると、後でいつでも気をつけることができます! –
MicrosoftのEsentの使用を検討しましたか? Wikiページ:https://en.wikipedia.org/wiki/Extensible_Storage_Engine ESENT Managed .Net lib:https://managedesent.codeplex.com/ –
@JeffFosterもちろん、できるだけ多くの速度を保ちたいと思います。それ以外には特別なパフォーマンス要件はありません。 – Bobrovsky