我有一个客户端服务器应用程序,它通过TCP/IP从客户端发送XML到服务器,然后广播到其他客户端。如何确定XML的最小大小,以便在压缩XML而不是通过常规流发送时获得性能提升。
是否有任何好的度量标准或示例?
我有一个客户端服务器应用程序,它通过TCP/IP从客户端发送XML到服务器,然后广播到其他客户端。如何确定XML的最小大小,以便在压缩XML而不是通过常规流发送时获得性能提升。
是否有任何好的度量标准或示例?
XML通常可以很好地压缩,因为它往往有很多重复的内容。
另一个选择是切换到二进制格式;BinaryFormatter或NetDataContractSerializer是简单的选项,但与xml相比,两者都出了名的不兼容(例如与java)。
另一个选择是使用可移植的二进制格式,例如谷歌的“协议缓冲区”。我维护着这个称为protobuf-net的.NET / C#版本。它旨在与常规的.NET方法(如XmlSerializer / DataContractSerializer)兼容,但比xml小得多,并且需要更少的处理(CPU等)进行序列化和反序列化。
此页面显示了XmlSerializer、DataContractSerializer和protobuf-net的一些数字;我认为它包括有/无压缩的统计数据,但似乎已经消失了...
[更新] 我应该说 - 在QuickStart项目中有一个TCP/IP示例。
一个宽松的度量标准是压缩任何大于单个数据包的内容,但这只是挑剔。
在应用程序内部使用二进制格式没有理由不可行 - 无论压缩需要多少时间,网络开销都比压缩慢几个数量级(除非我们谈论的是非常慢的设备)。
如果这两个建议不能让您放心,您可以随时进行基准测试以找到适合压缩的位置。
无论如何都要进行压缩。
对于任何具有超过2个标签的内容,这将为您节省带宽。
要决定压缩是否对您有益,您需要运行一些测试,使用实际或预期的数据量,以确定将流经您的系统的数据类型。
希望这可以帮助到您。