2010-08-23 66 views
3

我正在保存一个巨大的对象列表到一个文件,然后反序列化它们。生成的xml文件大小可以达到3个。C# - XML反序列化与二进制反序列化与二元期权+ Deflate

我想反序列化是超级快,所以我尝试了所有三种方法(XML,二进制,压缩)

显然,反序列化一个压缩文件需要更长的时间比XML之一。但是我看到二进制反序列化与xml反序列化相比也花费了更多时间。这是正常的吗?无论是XML和二进制都采取几乎相同的时间反序列化的对象?

此外,您认为使用文件大小和解串速度之间良好平衡的最佳选择是什么?

回答

5

this performance comparison与.NET(BinaryFormatter,XmlSerializer,DataContractSerializer等)和protobuf附带的各种序列化方法之间,protobuf序列化器似乎领先于.NET附带的序列化程序。由此产生的尺寸也越来越小。如果protobuf格式是您的选择,我强烈建议您看看它。 :-)

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

+0

谢谢你,我试过protobuf它太棒了......它大大缩短了时间。 – ace 2010-08-25 03:34:36

1

自定义您的序列化,完全或通过实现ISerializable然后使用二进制文件(尽管自定义XML也值得尝试)。不要连载记忆的字段,而只是其价值所依据的关键字段。通过序列化足够的信息来构建图的一部分,而不是图的完整表示,查找可以减小大小的其他区域。

然后使用deflate与那。

+0

嘿乔恩...是啊我想实现ISerializable,而是尝试protobuf ...现在我想知道如果我可以进一步自定义我的serialisationa与使用protobuf。 不知道我是否可以使用protobuf并仍具有ISerializable优势? – ace 2010-08-25 03:39:11