我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象,以便在我的局域网内发送。
我最近从2.0升级到.NET 3.5。 3.5有没有引入任何新类型来提高序列化性能?
我查看了DataContractSerializer
,但这会将任何内容序列化为基础XML ...这必须增加内存占用量。
通过LAN发送对象的最快串行器是什么?我不关心互操作或版本控制......我需要速度!
我对第三方开源替代品持开放态度。
答案 0 :(得分:10)
听起来Protocol Buffers可能就是你要找的东西。
我知道有三种.NET实现:protobuf-net,protobuf-csharp-port和Proto#。
performance comparisons表明Protocol Buffers在大小和序列化/反序列化速度方面都优于内置序列化器。
答案 1 :(得分:5)
我根据Northwind数据集提供了一些benchmarks for the leading .NET serializers。
@marcgravell二进制protobuf-net是基准测试的最快实现,比BCL中可用的Microsoft最快的序列化程序(XML DataContractSerializer)快 7x 。
微软的JsonDataContractSerializer相当慢 - 比protobuf-net慢<9> ,比我自己的JsonSerializer慢 3.6x 。
答案 2 :(得分:2)
在@Luke链接的performance comparison中,请注意DataContractJsonSerializer
与其他MS序列化程序相比表现非常好。
鉴于JSON无处不在,以及您可以轻松使用DataContractJsonSerializer
,我认为没有太多理由使用“协议缓冲区”。在语言和平台之间进行弹跳时,JSON将更容易调试,并且它将会很好地压缩。
(我喜欢Google采用CS 101概念并因实现它们而闻名。在C语言中,我们称之为“协议缓冲区”“struct”。它们运行良好。)
答案 3 :(得分:0)
正如我在this answer中演示的那样,生成的代码可能是最快的序列化程序。然而,它处于早期阶段,仍然缺乏其他序列化器提供的一些功能。