C# 我应该使用XML还是二进制文件将数据从服务器发送到客户端?
我有两个独立的应用程序——一个是客户端(用C#),一个是服务器(用C++)。他们需要以“结构”的形式交换数据,并且从服务器到客户端每分钟发送大约1MB的数据 使用XML还是我自己的二进制格式更好 使用XML:C# 我应该使用XML还是二进制文件将数据从服务器发送到客户端?,c#,c++,xml,C#,C++,Xml,我有两个独立的应用程序——一个是客户端(用C#),一个是服务器(用C++)。他们需要以“结构”的形式交换数据,并且从服务器到客户端每分钟发送大约1MB的数据 使用XML还是我自己的二进制格式更好 使用XML: 我相信,使用解析器将XML转换为结构会很慢?(“好”,但是:加载解析器,加载XML,解析) 另一个选项是使用正则表达式解析XML(坏!) 使用二进制: 紧凑的数据大小 不需要像标签这样的元信息 但结构不能轻易更改以适应未来结构中的新结构/新成员 无需将文本(XML)转换为二进制(结构
- 我相信,使用解析器将XML转换为结构会很慢?(“好”,但是:加载解析器,加载XML,解析)
- 另一个选项是使用正则表达式解析XML(坏!)
- 紧凑的数据大小
- 不需要像标签这样的元信息李>
- 但结构不能轻易更改以适应未来结构中的新结构/新成员李>
- 无需将文本(XML)转换为二进制(结构),因此接收和“组装”到结构中的速度更快)
有什么建议吗?我应该不考虑二进制吗??对于采取什么方法有些困惑。如果两端都有.NET应用程序,请使用Windows Communication Foundation。这将允许您将决定推迟到部署时,因为它同时支持二进制和XML序列化。XML的一个优点是互操作性。您是否有其他客户端也可以访问您的服务器 在使用自己的二进制格式或在XML上使用正则表达式之前……您是否考虑过.NET中的序列化命名空间?有二进制格式化程序、SOAP格式化程序,还有XmlSerialization。如您所述,XML速度稍慢,但更灵活、更可靠。我会一直使用XML,直到出现性能方面的问题 你也应该看看a作为替代品
而且,在更新之后,任何跨语言、跨平台和跨版本的要求都强烈反对二进制格式。如果你有合理的网络连接,每分钟1MB的数据是非常小的 二进制和XML之间还有其他选择——其他人类可读的文本序列化格式,如JSON 当涉及到二进制时,您不必有版本控制问题——像(我有偏见:我为谷歌工作,我已经)这样的技术在设计时明确考虑了向后和向前兼容性。还有其他二进制格式要考虑,例如. 但是,如果你担心性能,你应该真正衡量它。我非常确定我的手机能够足够快地解析1MB的XML,这样在这种情况下就不会有问题了。。。基本上找出你最关心的事情,包括:
- 代码的简单性
- 互操作性
- CPU性能
- 网络流量
- 向后/向前兼容性
- 联机格式的人类可读性
这都是一种平衡行为——但你必须决定对每一个因素赋予多少权重。text/xml
- 可读
- 易于调试
- 通过压缩可以节省带宽
- 标记记录它们包含的数据
- 紧凑的
- 易于解析(如果使用固定大小的字段,只需覆盖结构)
- 难以调试(十六进制编辑器是一个难题)
- 需要一个单独的文档来理解数据是什么
这两种表单都是可扩展的,只要您在数据报的开头插入类型和版本字段,就可以升级到较新的版本。XML的另一个优点是,您可以通过添加元素来扩展发送的数据,您不必更改接收者的代码来处理额外的数据,直到您准备就绪
此外,即使是XML的最小(快速)压缩也可以显著减少连线负载。您也可以使用,它是结构化数据的紧凑二进制表示形式 您没有说它们是否在同一台机器上。我想不会吧 在这种情况下,二进制还有另一个缺点。您不能简单地在线路上转储结构,可能会有endianness和sizeof问题
XML非常冗长,YAML或JSON要小得多不要忘记,大多数人认为的XML是序列化为文本的XML。可以将其序列化为二进制。这就是
netTcpBinding
和其他此类绑定在WCF中所做的。XML信息集输出为二进制,而不是文本。它仍然是XML,只是二进制的。嗨,我更新了这个问题。客户端在C++中,服务器是C++。现在有一个WCF的Windows本地库。寻找“Windows Web服务”,JSON呢。我们将所有接口记录为XML,但有一个用于XML->JSON转换的标准方法(仅在文档中)。然后我们的服务可以请求XML或JSON。因此,通常在调试时使用XML和JSON来提高效率。