Sai*_*ino 6 serialization design-patterns xml-serialization
我继承了一个项目,其中应用程序的数据模型是一个XML文档.我之前的开发人员已经基于这个xml的模式创建了一个对象模型,然后针对对象模型进行编码.
经过几年的维护,这个应用程序逐渐开始显示它的时代.该团队负责人表示,这背后的关键原因是由于xml序列化的"缓慢".我很想在这上面打电话给BS,但是我们处理的许多xml文件都超过了2MB,并且记住了带有标记对象的幕后工作的基础知识[Serializable],2MB很多都要反映出来缓慢理论可能有些道理.
根据您的经验,序列化真的如此"慢"/糟糕,以至于选择XML - > XPath模型而不是XML - > POCO模型?
BTW这是一个.NET 2.0项目,我们的客户可能会在明年晚些时候升级到.NET 3.5.
Xml序列化不使用Serializable属性.xml序列化程序实际上生成一个将xml映射到对象的程序集,它不使用反射.这是Xml序列化仅适用于公共的原因之一.
您可以尝试的一件事是使用DataContractSerializerWCF的一部分来衡量.看到差异很有意思.
我个人从未遇到过性能限制,但我也没有大型对象,例如你的描述.
需要注意的一件事是你用来创建的构造函数XmlSerializer,其中一些不会缓存生成的程序集,并且会导致性能损失和内存泄漏,因为每次调用都会生成越来越多的程序集.如果是这种情况,您有两种选择:
1)缓存您创建的序列化程序实例.我相信它是线程安全的,但你想要仔细检查MSDN.
2)使用不同的构造函数来创建XmlSerializer.
一般来说,不,我不认为减速是由于XML序列化; 2MB不是那么大,它不应该导致任何重大减速.
我更关心的是团队负责人告诉你减速是什么导致你没有给你任何具体的剖析信息显示你是这样的.关于优化的意见经常是错误的; 存在分析是为了精确地找到应用程序中发生减速的位置.我建议对应用程序进行检测和分析,并找出减速的位置; 我敢打赌它不在XML序列化中.