現在、大量のメモリ データをハード ドライブに保存しようとしています。現在、XMLSerializer を使用して 400,000 レコードの 1 つのテーブルを保存しようとしています。これは正しく機能しますが、xml ファイルのサイズが 1 GB を超えています。私のクラスはすべて [Serializable()] を実装しています。データは並行キューにあり、シリアル化する前に List<> にキャストします。
私の質問は次のとおりです。より小さなファイルを作成する、より優れた、より高速なシリアライザーはありますか? より小さなファイルは、私が望む最も重要なものです。
編集: ファイルは人間が読める必要はありません。目標は、最小のフットプリントと最速の速度で数十万のレコードをディスクに保存できるようにすることです。Binary Serialization について調べていますが、「システム オブ メモリ」エラーが発生するという問題が発生しています。最初にすべてのデータをメモリにロードせずに、ディスクに直接書き込む方法があるかどうかを確認しようとしています。メモリ マップト ファイルはオプションの場合があります。
ストレージに SQL Server 2008 を使用するオプションもあります。アプリケーションがデータベースにアクセスできる場合はこれをセカンダリストレージユニットとして使用し、アクセスできない場合はコンピューターにファイルを保存することを計画していました。
var xml = new XmlSerializer(typeof(List<pPeople>));
FileStream fs = new FileStream(@"C:\Users\...\Desktop\TestLogFile.xml", FileMode.Create);
TextWriter tw = new StreamWriter(fs);
xml.Serialize(tw, peoplePeople.ToList<pPeople>());
tw.Close();
fs.Close();
//Deserialize
FileStream openFS = new FileStream(@"C:\Users\...\Desktop\TestLogFile.xml", FileMode.Open);
var savedPeople = (List<pPeople>)xml.Deserialize(openFS);
peoplePeople = (ConcurrentQueue<pPeople>)savedPeople.Cast<ConcurrentQueue<pPeople>>();
openFS.Close();