为什么在序列化字符串列表时ProtoBuf-Net的性能如此差?

时间:2013-08-24 19:59:23

标签: c# .net serialization compression protobuf-net

我正在玩ProtoBuf,试图了解预期的压缩类型。作为测试用例,我有一个10,000,000个字符串的列表,我正在序列化,然后将其拆分为3.9mb块。 ProtoBuf似乎做得很糟糕,最终创造了30多个块。以下是我运行的测试结果。


ProtoBuf-Net序列化:30个3.9mb块

BinaryFormatter序列化:12个3.9mb块

BinaryFormatter w / Deflate Stream Serialization:1 72kb chunk


我这样叫ProtoBuf:

ProtoBuf.Serializer.Serialize<List<string>>(names);

感谢任何帮助。

1 个答案:

答案 0 :(得分:8)

您能指出测试数据在这里吗?我怀疑你是多次序列化相同的字符串实例。 BinaryFormatter总是重用引用。核心protobuf规范没有对象重用,因此protobuf-net(用于兼容性)尊重这一点 - 但它支持支持对象重用(使用特殊字符串来提高性能)。但它严格选择加入,以保持与其他protobuf实现的兼容性。

所以:如果数据真的要使用相同的字符串内容:我可以告诉你如何启用它。

如果数据真正使用相同的字符串内容:那么您的测试无效。