0

現在、大量のメモリ データをハード ドライブに保存しようとしています。現在、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();
4

2 に答える 2

-3

XML の代わりにJSON.NETを使用します。.NET はより小さいファイルを生成し、XML よりも高速に解析されます。ただし、XSLT を使用して XML を他のものに変換する場合は、XML を使用することをお勧めします。ここではいくつかの例を示します。

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };

string json = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": "2008-12-28T00:00:00",
//  "Sizes": [
//    "Small"
//  ]
//}

ご覧のとおり、XML よりも冗長ではありません。次に、javascript ミニマイザーを使用して、さらに小さくすることができます。

于 2013-10-14T18:36:05.607 に答える