2024年4月16日发(作者:)

圈圜嘲I Academic・Papers 

NET Framework中二进制与XML序列化方法的比较 

Comparison of Binary and XML Serialization in.NET Framework 

范东明 王 坚 戴毅茹 

(同济大学CIMS研究中心,上 海201804) 

摘 要:研究了二进制序列化和XML序列化在.NET平台下所表现的不同性能,分析了二进制序列化和XML 

序列化的不同特点;通过实例比较了二进制序列化和XML序列化的效率,研究了导致二者间性能不同的原因并提 

出了合理的优化方案。 

关键词:二进制序列化XML序列化 .NET rfamework 

dd:lO.3969/j.issn.1007-080X.2009.12.004 

Abstrac:This article research binary and XML object serialization on.NET platforms from the performance. 

Analysis binary and XML serialization the diferences between the two serializations types,and compares binary and XML 

serialization the efficiency by the instance,studies the reasons for performance diferences and provides possible 

erpformance optimizations. 

Key words:binary serialization XML serialization .NET ̄amework 

0引 言 

效率。通过比较进而了解两种序列化的不同点。 

对象序列化是对象持久化的一种实现方法.它将一个对象 

1二进镧序列化分析 

的属性和方法转化为一种序列化的格式以用于存储和传输.反 表1列出了3个类当二进制序列化和反序列化时所需的 

 000、10 000、100 000次 

序列化就是根据这些保存的信息重建对象的过程【l1 在现在的 

时间(以ms为单位),分别进行100、1

软件平台中序列化已经成为一个相当重要的概念.例如Sun公 重复测试。目的是得到序列化对象的次数和序列化、反序列化 

司的Jaya平台、微软的NET平台。两种平台都为序列化提供了 

所花费的时间之间的关系 

表l二进制序列化在不同阶段所花费的时间ms 

很好的支持,以便轻松地开发。序列化是其他技术的基础,它在 

RMI(远程方法调用)和分布式对象模型中的作用尤为突出,可 

以把对象封装成值类型并且可以跨进程、跨计算机进行发送I-一。 

个对象的序列化状态可以表现为二进制和XML格式 

从理论上说.二进制序列化无论是性能还是序列化后的数据流 

大小都比XML序列化更具优势.因为它需要做的转化比XML 

序列化要少的多;而另一方面。XML序列化则更为方便,它的 

可读性好并且广泛用于Web服务目 因此有必要比较一下二进 

制和XML序列化的性能.比较一下它们在.NET平台上的执行 

如表l所示,序列化的性能取决于类的大小和类的数量。 

{基金项目:上海市科技发展重点项目(编号:061612058);上海市基础研究重点项目(编号:06JCl 

大专项项目(编号:06DZ12001)。 

);上海市社会发展重 

作者简介:范东明 硕士研究生。研究方向为企业信息化和智能生产系统。 

王 坚研究员,博士生导师。研究方向为系统工程、敏捷制造和企业信息化。 

38机电一体化j 2。0912 

Academic・Papers幢重曩嘲 

但是我们可以看到.最大的Insurancelnformation类随着数量的 

增加时间却略有下降,如图1所示。在.NET中,序列化和反序 

列化的时间与类的大小关系比较紧密。 

表3 xML序列化在不同阶段所花费的时间ms 

长相对缓慢.序列化的时间开始时增长较快但不久就呈现出下 

降趋势。 

l00 10000 10ooo l00000 

图1二进制序列化的比较 

在.NET中.有一种趋势是当进行1 000 000次对象的实验 

时反序列化与序列化相比所用的时间在增加。对代码分析产生 

的结果如表2所示.展示了.NET中的二进制序列化在不同阶 

段所花费的时间比例。 

袭2二进制序列化在不同阶段所花费的时间比例 % 

图2 XML序列化的比较 

NET中的XML反序列化不比序列化快多少 当序列化对 

象的数量较少时反序列化甚至比序列化所花费的时间更长 但 

是当序列化对象的数量较多时.反序列化要优于序列化。产生 

这种情况的原因是:在.NET中的XML类库需要初始化引导配 

置 表4列出的是序列化和反序列化在不同阶段所花费时间的 

百分比: 

可以看到随着类的数量不断增加.反序列化创建对象的时 

间在不断增长.并且成为消耗时间的主要因素。在类的数量不 

表4 XML序列化在不同阶段所花费的时间比例 % 

多的情况下,在.NET中反序列化不适合用二进制来进行 在序 

列化中我们可以看到:随着对象数量的增加封装所用的时间逐 

渐减少,而获取数据和写入的时间在不断增加 

在.NET中是利用反射机制来获取对象的数据.用来序列 

化。.NET不通过反序列化来调用构造函数,这必须被考虑到而 

且可以作为一个优化性能的方法。而提高性能的主要方法有: 

①通过反序列化对象时提高性能;②通过反射机制提高性能。 

2 XML序列化分析 

我们可以看到在.NET中XML序列化时的封装和开箱所 

花费的代价是相当高的,这可以作为提高性能的一个突破口。 

表3列出的是3个类的XML序列化和反序列化的时间 

(以ms为单位)。TestObject.Contract.和InsuranceInformation类 而它的获取、创建对象的过程和输入输出是相当有效率的。 

在.NET中是用C#编写的.与二进制一样我们分别进行100. 

3二进制与XM[L序列化的比较 

1 000.10 ooo,lOO oo0次对象的测试。 

从图2中我们可以看到.XML序列化的性能取决于类的 

大小和类的数量.随着类的数量的增加反序列化所需时间的增 

‘ 

如图3所示.在.NET中二进制序列化比XML序列化快2~ 

3倍。 

(下转第69页1 

2o。9 2{机电一体化39 

圈圜唧l Academic・Papers 

。 

5结束语 

液压同步翻转系统提高了叶片制作的效率和安全稳定性. 

增强了大型风电叶片的生产制造能力 由以上实测结果可以看 

出,数字式双闭环PID控制方法显示了在该液压翻转系统中的 

适用性。目前。液压翻转系统已在多台叶片模具设备中得到了 

应用,实践证明.双闭环控制策略成功地解决了翻转过程中的 

参考文献 

[1]颜海银,乐韵斐.风电叶片模具变幅翻转机构运动学分析[J].机电 

体化,2007(6):44-47. 

[2]乌建中,徐鸣谦.石洞口电厂2401/"1钢内筒烟囱液压顶升同步控制 

[J].同济大学学报,1993(3):99—104. 

[3]薛弘晔.计算机控制技术[M].西安:西安电子科技大学出版社, 

20o3. 

同步和匀速问题.达到了设计要求 

[4]精通SIMULINK系统仿真和控制[M].北京:北京大学出版社。 

2O03. 

【上接第39页) 

Te ̄tObject Contract Insurance Information 

I 里里 ! 

围3二进制与XML序列化的比较 

l 

0 l0000 20000 30000 40000 50000 60000 70000 80000 90000 100O00 

从性能上看.XML序列化还不能代替二进制序列化 虽然 

我们已经确定了可行的性能优化.但是二进制序列化总是在数 

量级上优于XML序列化 

图4显示了二进制序列化和XML序列化在存储空间上的 

l ===竺竺:: := : I 

图4二进制与XML序列化的比较 

方便地使用来自其他应用、程序语言或平台的序列化的数据。 

二进制序列化是一个典型的深度序列化 它包括类的所有 

。二进制 

比较 在.NET中.xML序列化流的存储空间比二进制序列化大 

属性.包括私有的(private) ̄11受保护的(pmtected)J ̄

3.3倍左右。从存储空间的角度看,XML序列化依旧不能完全 

序列化也能够处理对象图的循环引用.而XML序列化只能序 

代替二进制序列化。两种序列化类型有各自的使用方案:二进 

列化公共(public)成员并且没有处理对象图的循环引用的能 

制序列化以保持对象状态为应用目的.XML序列化则用于数 

力。XML序列化是一个典型的浅度序列化。 

据的共享。另外。性能与规模之间并没有直接的联系。.NET中, 

● 

比二进制序列化大3.3倍规模的XML序列化需要2-5倍的性 

参考文献 

能为代价,但是正如我们之前所说的还有优化的余地。影响性 

[1]ANN NAVARRO.XML从入门到精通[M].周生炳,译.北京:电子 

能的主要因素是XML反序列化解析数据时要比二进制代价 

更大。 

4结束语 

工业出版社.2000. 

[2]BILL EVJEN,KENT SHARKEY,THIRU THANGARATHINAM,et a1. 

XML高级编程[M].王春楠,刘永金,译.北京:清华大学出版社, 

2009. 

本文在.NET平台上比较了二进制序列化和XML序列化. 

评估方法是从时间和空间的角度来分析和比较序列化的效率. 

另外还分析了代码从而找出瓶颈并制定出优化方案 

二进制序列化是依赖类的.它的反序列化要求使用一个与 

序列化类兼容的类.除了二进制序列化的元数据存储类的数 

[3]高立群,俞家文,丁俊松..NET Framework中序列化与反序列化方 

法的分析与应用[J].微计算机应用,2007,29(11):1178—1182. 

[4]陈忠睿,刘齐宏..NET Framework中XML序列化研究[J].郑州轻 

工业学院学报,2005,20(2):94—95. 

【5]郭荷清,王曾勋.XML数据绑定及对象序列化的应用研究【M].计 

算机应用及软件,2006,23(5):65—66. 

据,还包括类名、版本信息和属性的结构。XML序列化没有存 

储这么多元数据。使用XML序列化可以控制XML词汇.以更 

72机电一体化};73"99 12