Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET 4.0中,我是否仍应使用BinaryFormatter进行简单的序列化?_C#_.net_Performance_Serialization_Binary Serialization - Fatal编程技术网

C# 在.NET 4.0中,我是否仍应使用BinaryFormatter进行简单的序列化?

C# 在.NET 4.0中,我是否仍应使用BinaryFormatter进行简单的序列化?,c#,.net,performance,serialization,binary-serialization,C#,.net,Performance,Serialization,Binary Serialization,我正在开发一个主从式应用程序。主应用程序将向从应用程序发送状态数据,以某种恒定速率进行处理和显示。状态数据被包装到一个包含许多字段的类中。这些字段类型由原语、类、接口、接口列表等组成。所有类型都是BCL或自定义类型,因此可以根据需要修改自定义类型。主应用程序和从应用程序都将是.NET4.0。我不关心序列化版本控制,因为主应用程序和从应用程序将成对交付 我需要一种“快速”的方法来序列化主服务器上的状态数据,并反序列化从服务器上的状态数据。当我说“quick”时,我更多的是指开发时间(但是如果解决方

我正在开发一个主从式应用程序。主应用程序将向从应用程序发送状态数据,以某种恒定速率进行处理和显示。状态数据被包装到一个包含许多字段的类中。这些字段类型由原语、类、接口、接口列表等组成。所有类型都是BCL或自定义类型,因此可以根据需要修改自定义类型。主应用程序和从应用程序都将是.NET4.0。我不关心序列化版本控制,因为主应用程序和从应用程序将成对交付

我需要一种“快速”的方法来序列化主服务器上的状态数据,并反序列化从服务器上的状态数据。当我说“quick”时,我更多的是指开发时间(但是如果解决方案很糟糕,处理时间可能是一个因素)。但是,主服务器和从服务器将分布在WAN上,因此某种程度的紧凑性也很好


为了快速解决问题,我目前正在考虑使用
BinaryFormatter
,然后使用
GZipStream
压缩流。这就是.NET 4.0的发展方向吗?

如果开发速度是关键(尤其是因为您有接口等,您需要为某些序列化程序进行适当配置),那么可能。请记住将任何事件标记为:

[field:NonSerialized]
每一个其他度量标准上(CPU性能、带宽、版本的健壮性、互操作性、维护成本等),我会选择其他格式:)

这里有一个选择:


也许这并不奇怪(因为我写了它),但我倾向于protobuf net…

看看这里的协议缓冲区:

BinaryFormatter很好,无需根据您的需要拖拽第三方解决方案,而且非常简单易用。不要使用GZipStream,它只会增加开销。内存带宽太高,不能让它发挥作用。@Hans:他说的是通过WAN发送数据(这可能意味着带宽小于10Mbps)。我认为
GZipStream
对于这个应用程序几乎是强制性的。使用
[非序列化]
标记事件非常重要。我没想过。protobuf网络的性能测试令人印象深刻。你的图书馆对我的案子有用吗?我必须序列化接口和接口列表。其中一些接口表示不可变的对象;i、 e.它们只有getter属性,而实现类有私有setter。@dewald直到大约一周前,它还很难做到这一点;上周末,我添加了一个功能,通过存储底层类型的详细信息来实现这一点——这是对一个非常常见的请求的一个丑陋的回答。查看我的博客了解更多信息。