C#-XML反序列化vs二进制反序列化vs二进制+;瘪下来

C#-XML反序列化vs二进制反序列化vs二进制+;瘪下来,c#,C#,我正在将一个庞大的对象列表保存到一个文件中,然后反序列化它们。生成的xml文件大小约为3 Gig 我希望反序列化速度非常快,所以我尝试了所有三种方法(xml、二进制、压缩) 显然,反序列化压缩文件比XML文件需要更长的时间。但是我看到二进制反序列化也比xml反序列化花费更多的时间。这正常吗?xml和二进制文件反序列化对象不应该花费几乎相同的时间吗 另外,您认为在文件大小和反序列化速度之间保持良好平衡方面,什么是最好的选择 在.NET附带的各种序列化方法(BinaryFormatter、XmlSe

我正在将一个庞大的对象列表保存到一个文件中,然后反序列化它们。生成的xml文件大小约为3 Gig

我希望反序列化速度非常快,所以我尝试了所有三种方法(xml、二进制、压缩)

显然,反序列化压缩文件比XML文件需要更长的时间。但是我看到二进制反序列化也比xml反序列化花费更多的时间。这正常吗?xml和二进制文件反序列化对象不应该花费几乎相同的时间吗

另外,您认为在文件大小和反序列化速度之间保持良好平衡方面,什么是最好的选择

在.NET附带的各种序列化方法(BinaryFormatter、XmlSerializer、DataContractSerializer等)和protobuf之间,protobuf序列化程序似乎远远领先于.NET附带的序列化程序。由此产生的大小也可能更小。如果protobuf格式是您的一个选项,我强烈建议您查看一下。:-)


另一种选择:如果反序列化很慢,只反序列化您真正需要的部分。创建一个索引文件,告诉您写入数据文件的对象的偏移量,这样您就可以以随机访问的方式快速反序列化所需的对象。

完全或通过实现ISerializable然后使用二进制来定制序列化(尽管自定义XML可能也值得尝试)。不要序列化备忘字段,而只序列化其值所基于的关键字段。寻找其他可以通过序列化足够的信息来构建部分图形而不是图形的完整表示来减小大小的区域


然后使用deflate。

谢谢,伙计,我试过protobuf,它太棒了……它大大缩短了时间。嘿,jon……是的,我想实现ISerializable,但尝试了protobuf……现在我想知道我是否可以在使用protobuf的同时进一步定制我的serialisationa。不确定我是否可以使用protobuf,并且仍然有iSeries化的好处?