gpt4 book ai didi

c# - 原始类型的最佳序列化

转载 作者:太空狗 更新时间:2023-10-29 21:15:59 28 4
gpt4 key购买 nike

我们开始推出越来越多的产品 WAN 部署(带有 IIS 托管远程处理后端的 .NET 胖客户端)。正因为如此,我们正在努力减少传输数据的大小。

我们通过实现 ISerializable(类似于 this)覆盖了默认序列化,我们看到了 12% 到 50% 的 yield 。我们的大部分工作都集中在优化基本类型的数组上。 是否有一种超越显而易见的序列化原始类型的奇特方法?

例如,今天我们序列化一个int数组如下:

[4-bytes (array length)][4-bytes][4-bytes]

谁能做得更好?

对于 bool 数组,最明显的重大改进示例是在每个字节中放入 8 个 bool 值,我们已经这样做了。

注意:为每个 bool 值节省 7 位可能看起来是在浪费时间,但当您处理大量数据(我们就是这样)时,它加起来会非常快。

注意:由于与之相关的延迟,我们希望避免使用通用压缩算法。远程处理仅支持缓冲请求/响应(无分块编码)。我意识到压缩和最佳序列化之间存在细微差别,但我们的测试表明我们可以以极低的延迟成本提供非常具体的序列化优化。而将整个缓冲响应重新处理到新的压缩缓冲区中的成本太高。

最佳答案

(与消息/类有关,而不仅仅是原语)

Google 为这种情况设计了“ Protocol Buffer ”(它们转移了大量数据)——它们的格式紧凑(使用 base-128 编码之类的东西)但可扩展和版本容错(因此客户端和服务器可以升级很容易)。

在 .NET 世界中,我可以推荐 2 个 Protocol Buffer 实现:

有关信息,protobuf-net 直接支持 ISerializable 和远程处理(它是 unit tests 的一部分)。有性能/尺寸指标 here .

最重要的是,您所做的只是向您的类添加一些属性。

警告:它并不声称是理论上的最佳 - 但实用且易于正确 - 在性能、可移植性和简单性之间进行折衷。

关于c# - 原始类型的最佳序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/534274/

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