c#最快的序列化机制是什么?

Rog*_*een 7 .net c# serialization

这适用于小型有效载荷.

我期待每100毫秒达到1,000,000,000.

标准的BinaryFormatter非常慢.DataContractSerializer比BinaryFormatter慢.

对于小对象,协议缓冲区(http://code.google.com/p/protobuf-net/)似乎比BinaryFormatter慢!

是否有更多的序列化机制应该关注硬核编码或开源项目?

编辑: 我在内存中序列化然后在异步套接字上通过tcp传输有效负载.在内存中生成的有效负载是具有ulong标识符的小型双数组(10到500个点).

Dar*_*rov 11

您的性能要求将可用的序列化程序限制为0.自定义BinaryWriter和BinaryReader将是您获得的最快速度.


Jon*_*eet 6

我已经预计Protobuf-net即使对于小对象也会更快......但你也可能想尝试我的协议缓冲端口.我有一段时间没有使用过Marc的端口 - 当我上次进行基准测试时,我的速度更快了,但是我知道他从那时起经历了一次完全重写:)

无论你做什么,我都怀疑你会在100毫秒内完成10亿个项目的序列化......我认为这只是一个不合理的期望,特别是如果这是写入磁盘的话.(显然,如果你只是重复覆盖相同的内存,你会获得比串行化到磁盘更好的性能,但我怀疑这是你真正要做的.)

如果您能给我们更多的背景信息,我们可以提供更多帮助.例如,您是否能够将负载分散到多台机器上?(多个内核序列化到同一IO设备不太可能有所帮助,因为如果它写入磁盘或网络,我不希望这是一个CPU绑定操作.)

编辑:假设每个对象是10个双精度数(每个8个字节),带有ulong标识符(4个字节).这至少是每个对象84个字节.所以你试图在100ms内序列化8.4GB.无论你用什么,我真的不认为这是可以实现的.

我现在正在运行我的Protocol Buffers基准测试(它们每秒都会对字节序列化)但我非常怀疑它们会给你你想要的东西.

  • @RogerGreen:你真的希望能够通过网络在100ms内传输十亿个对象吗?它只是*不会发生*,即使你可以在记忆中做那么多.序列化本身*不会成为瓶颈. (3认同)