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。