現在のストレージ システムを置き換えることができるストレージ システムを作成しようとしています。
.Net コンパクト フレームワークを使用して、WP7、XBOX、および PC と互換性のある方法で、ガベージをほとんどまたはまったく作成せずに、毎秒数十のファイルをかなり高速に保存できる必要があります。
もともと私が作成しているゲームでは、ファイルをディスクに保存しました。世界のさまざまな部分とその中にあるものに対して数百のファイルがあるためです (私はできる限りファイルを一緒に折りたたんでいます)、バックグラウンド スレッドでこれらのファイル新しいファイルをストリーミングしながら、バッチ処理してからバッチで書き出すことができます。
これは PC では問題ありませんでしたが、携帯電話ではゲームを終了したり、携帯電話の電源を入れたりすることが頻繁にあり、そのため、実際に保存されるのは Z ファイルのうち X ファイルのみであり、その結果、保存ファイルの状態が不明になります。さらに悪いことに、Xbox で 1 つのファイルを保存してディスクにコミットするのに最大 1 秒かかります。割り当てられたメモリの 1 MB ごとに「非常に悪い」ガベージ コレクタが実行されるため、1 ~ 3 秒。ゲーム内の他のすべてはガベージを生成せず、プールおよびキャッシュされるため、これも問題でした。
そこで、単一のファイルを使用して、zip システムを使用してすべてを保存するように移行しました。これは機能しますが、設計されていない方法で使用しているため、zipファイルが破損することはほとんどありません...基本的に、ゲームの開始時にファイルをロードし、メモリストリームにある間にファイルに保存します、その後、プレーヤーの進行状況に基づいて 3 ~ 7 分ごとに、1 つのファイルをディスクにダンプします。
したがって、基本的にzipファイル(私は2つの実装を試しました)は必要なことをしていません。私が必要とすることを実行できる、または自分自身を構築する方法についてのアイデアを持っているものが他にあるかどうか、誰かが知っていますか?
tldr;
要するに、私は次のようなシステムが必要です
- 単一ファイル
- メモリ内に常駐し、ローカル ディスクに定期的にコミットできます
- ゴミがほとんど出ない
- .Net Compact フレームワークに準拠 (またはソースを使用して、そうすることができます)
- ファイル/構造の編集はその場で行われます
- 信頼性第一、性能第二
- 圧縮や暗号化は不要
- ファイルのごく一部をロードできる必要はありません
- データベースのタイプである可能性があります/ファイル構造を模倣する必要はありません
この質問に似ている
誰にもアイデアはありますか?