現在我正嘗試將大量內存數據保存到我的硬盤中。它目前正嘗試使用XMLSerializer保存一個包含400,000條記錄的表。這工作正常,但xml文件的大小超過1演出。我所有的類都實現了[Serializable()]。我的數據處於併發隊列中,我在序列化之前將其列入列表<>。用於非常大型數據的XMLSerializer的替代品
我的問題是:是否有更好,更快的序列化程序,將創建更小的文件?較小的文件是我想要的最重要的東西。
編輯:該文件不需要是人類可讀的。我們的目標是能夠以最小的佔地面積和最快的速度將數十萬條記錄保存到磁盤中。我正在研究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();
你看過任何壓縮技術嗎? –
'JSON'會產生一個較小的文件。而壓縮格式可以變得更小。序列化是否需要人類可讀? – Sorax
在這種情況下,可能nosql數據庫將是更好的選擇。您也可以嘗試使用JSON和http://code.google.com/p/protobuf-net/。 –