gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:41 26 4
gpt4 key购买 nike

我正在玩 ProtoBuf,试图了解期望什么样的压缩。作为一个测试用例,我有一个包含 10,000,000 个十个字符串的列表,我正在对其进行序列化,然后将其拆分为 3.9mb 的 block 。 ProtoBuf 似乎在这方面做得很糟糕,最终创建了 30 多个 block 。这是我运行的测试的结果。

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

BinaryFormatter 序列化:12 个 3.9mb block

BinaryFormatter w/Deflate 流序列化:1 72kb block

我这样称呼 ProtoBuf:

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

任何帮助表示赞赏。

最佳答案

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

所以:如果数据真的要使用相同的字符串内容:我可以向您展示如何启用它。

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

关于c# - 为什么 ProtoBuf-Net 在序列化字符串列表时性能如此差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com