现在我正在尝试将大量内存数据保存到我的硬盘驱动器中。它目前正在尝试使用 XMLSerializer 保存一个包含 400,000 条记录的表。这可以正常工作,但 xml 文件的大小超过 1 gig。我所有的类都实现了[Serializable()]。我的数据在并发队列中,我在序列化之前将其转换为 List<>。
我的问题是:是否有更好、更快的序列化程序可以创建更小的文件?较小的文件是我想要的最重要的东西。
编辑:该文件不需要是人类可读的。目标是能够以最小的占用空间和最快的速度将数十万条记录保存到磁盘上。我正在研究二进制序列化,但遇到“内存系统”错误的问题。我正在尝试查看是否有一种方法可以直接写入我的磁盘,而无需先将所有数据加载到内存中。内存映射文件可能是一个选项。
我还可以选择使用 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();