我正在玩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);
感谢任何帮助。
答案 0 :(得分:8)
您能指出测试数据在这里吗?我怀疑你是多次序列化相同的字符串实例。 BinaryFormatter总是重用引用。核心protobuf规范没有对象重用,因此protobuf-net(用于兼容性)尊重这一点 - 但它支持支持对象重用(使用特殊字符串来提高性能)。但它严格选择加入,以保持与其他protobuf实现的兼容性。
所以:如果数据真的要使用相同的字符串内容:我可以告诉你如何启用它。
如果数据不真正使用相同的字符串内容:那么您的测试无效。