c# – 提高XmlSerializer的性能

我使用XmlSerializer来序列化/反序列化一些对象.问题在于性能.分析时,使用XmlSerializer使我们的应用程序启动时间延长2秒.我们缓存我们的XmlSerializer并重用它们.我们不能使用sgen.exe,因为我们正在使用XmlAttributeOverrides创建XMLSerializer.

我尝试使用像Json.Net这样的序列化替代方案,起初它的工作很棒.问题是我们需要向后兼容,因此需要正确解析已生成的所有xml.此外,对象序列化输出必须是Xml.

总结一下:

>我收到XmlSerializer序列化的Xml数据.
>我需要反序列化Xml数据并将其转换为对象.
>我需要将对象序列化为Xml(理想情况下是Xml格式,就像XmlSerializer所做的那样)

解决方法

最终,它取决于您的模型的复杂性. XmlSerializer需要做很多思考,事实上它花了这么长时间才让我怀疑你的模型非常复杂.对于一个简单的模型,可能可以使用LINQ-to- XML手动实现反序列化(非常简单),甚至可能是XmlReader(如果你感觉非常勇敢 – 不容易100%正确).

但是,如果模型很复杂,这是一个问题,坦率地说,在引入微妙的错误方面会非常危险.

一个选项是DataContractSerializer,它处理xml,但不如XmlSerializer,当然也没有对布局的控制.我强烈怀疑DataContractSerializer不会帮助你.

我没有直接替换XmlSerializer,如果sgen.exe不是一个选项,我相信你基本上有选择:

>忍受它
>自己重写XmlSerializer,不知何故做得比他们好
>使用LINQ-to-XML之类的东西并接受所涉及的工作

从长远来看,我会说“切换格式”,并仅使用xml进行旧版导入.我碰巧知道一些非常快速的二进制协议,它们很容易替代; p

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...