C#中具有最低内存占用的最快串行器和解串器?

我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象以便在我的LAN周围发送。

我最近从2.0升级到.NET 3.5。 3.5有没有引入任何新类型来提高序列化性能?

我已经查看了DataContractSerializer ,但是它将任何内容序列化为基础XML …这必须增加内存占用。

什么是通过LAN发送对象的最快串行器? 我不关心互操作或版本控制…… 我需要速度!

我对第三方开源替代品持开放态度。

听起来像协议缓冲区可能就是您正在寻找的东西。

我知道有三种.NET实现: protobuf-net , protobuf-csharp-port和Proto# 。

性能比较表明,Protocol Buffers在大小和序列化/反序列化速度方面都优于内置的串行器。

我有一些基于Northwind数据集的领先.NET序列化程序的基准测试 。

@marcgravell二进制protobuf-net是基准测试的最快实现,比BCL中可用的Microsoft最快串行器(XML DataContractSerializer)快约7倍

微软的JsonDataContractSerializer非常慢 – 比protobuf-net慢9 倍,比我自己的JsonSerializer慢3.6倍

在@Luke链接的性能比较中 ,请注意DataContractJsonSerializer与其他MS序列化器相比表现非常好。

鉴于JSON的无处不在,以及您可以轻松使用DataContractJsonSerializer ,我没有太多理由使用“协议缓冲区”。 在语言和平台之间弹跳时,JSON将更容易调试,并且它将精美地压缩。

(我喜欢Google采用CS 101概念并因实现它们而闻名。在C中,我们称之为“协议缓冲区”“struct”。它们运行良好。)

正如我在本回答中所演示的那样,生成的代码可能是最快的序列化程序。 然而,它处于早期阶段,仍然缺乏其他序列化器提供的一些function。