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

时间:2009-03-09 15:42:12

标签: c# .net wcf sockets remoting

我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象,以便在我的局域网内发送。

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

我查看了DataContractSerializer,但这会将任何内容序列化为基础XML ...这必须增加内存占用量。

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

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

4 个答案:

答案 0 :(得分:10)

听起来Protocol Buffers可能就是你要找的东西。

我知道有三种.NET实现:protobuf-netprotobuf-csharp-portProto#

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中演示的那样,生成的代码可能是最快的序列化程序。然而,它处于早期阶段,仍然缺乏其他序列化器提供的一些功能。