質問

できるだけ早く辞書をファイルに保存する必要があります。キーと値の両方はオブジェクトであり、シリアル化可能としてマークされることを保証されていません。また、何千ものオブジェクトをシリアル化するよりも速いメソッドを好みます。そのため、.NET 4でマッピングされたメモリファイルサポートを調べました。ただし、MemoryMappedViewAccesserは、基準タイプではなく構造体のストレージのみを許可するようです。

ファイルの参照タイプで使用されているメモリを保存し、そのメモリのブロブからオブジェクトを再構築する方法はありますか(バイナリシリアル化なし)?

役に立ちましたか?

解決

メモリマッピングされたファイルは、ガベージコレクターと基本的に互換性がありません。そのため、このような主要なオペレーティングシステム機能が.NETによってサポートされるのに時間がかかりました。参照タイプは、MMFビュー、MemoryMappedViewStreamにシリアル化する必要があります。同様の制限が管理されていないコードに存在します。ポインターを持つオブジェクトを平らにする必要があるため、尖ったオブジェクトもビューに表示されます。

それらをMMFにシリアル化する場合でもファイルにも違いはありません。ファイルシステムキャッシュもMMFSで実装されます。ファイルの書き込みはです 非常に 書かれたデータが利用可能なマップ可能なメモリに適合する限り、高速。それが問題の場合は、64ビットオペレーティングシステムを見て、その問題を解決してください。

他のヒント

メモリの塊を保存することは、参照タイプがある場合、次回ファイルにアクセスされるときに適用されない可能性のある他のメモリブロックへのポインターを持つため、メモリの塊を保存することは単に実行できないと思います。そのため、バイナリシリアル化が存在するのは、これらの種類の参照を維持するためです。ただし、本当に厳しい制御が必要な場合は、System.io.io.io.binaryWriterとBinaryReaderを使用して、オーバーヘッドを最小限に抑えながら、どのシーケンスでファイルに書かれたものを正確に制御できます。

これは、バイナリシリアル化が設計されたシナリオのタイプです。あなたがそれを使いたくない理由はありますか? 「遅すぎる」ことを確認しましたか?確かに、独自のカスタムシリアイザーをコーディングし、おそらく特定のシナリオに対してより効率的にすることができますが、今後維持する必要があります。努力する価値はありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top