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

elu*_*id8 1 .net c# compression serialization protobuf-net

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


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

BinaryFormatter序列化:12个3.9mb块

具有Deflate流序列化的BinaryFormatter:1个72kb块


我这样叫ProtoBuf:

ProtoBuf.Serializer.Serialize<List<string>>(names);
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

Mar*_*ell 8

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

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

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