gpt4 book ai didi

c# - 提高 XmlSerializer 的性能

转载 作者:数据小太阳 更新时间:2023-10-29 01:46:50 30 4
gpt4 key购买 nike

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

我尝试使用 Json.Net 之类的序列化替代方案,一开始效果很好。问题是我们需要向后兼容,所以所有已经生成的 xml 都需要正确解析。此外,对象序列化输出必须是 Xml。

总结:

  1. 我收到由 XmlSerializer 序列化的 Xml 数据。
  2. 我需要反序列化 Xml 数据并将其转换为对象。
  3. 我需要将对象序列化为 Xml(最好是像 XmlSerializer 那样的 Xml 格式)

最佳答案

最终,这取决于模型的复杂性。 XmlSerializer 需要做很多思考,而且花费这么长时间的事实让我怀疑您的模型非常复杂。对于简单模型,可以使用 LINQ-to-XML(非常简单)或什至 XmlReader 手动实现反序列化(如果您感觉非常勇敢- 要 100% 正确并不容易)。

但是,如果模型很复杂,这就是一个问题,坦率地说,在引入细微错误方面风险很大。

另一个选项是处理 xml 的 DataContractSerializer,但不如 XmlSerializer 好,而且对布局的控制肯定也不尽如人意。我强烈怀疑 DataContractSerializer 不会帮助你。

据我所知,XmlSerializer 没有直接替代品,如果 sgen.exe 不是一个选项,我相信您基本上有以下选择:

  • 接受它
  • 自己重写XmlSerializer,比他们做得更好
  • 使用 LINQ-to-XML 之类的东西并接受相关的努力

从长远来看,我会说“切换格式”,并且仅将 xml 用于遗留导入。我碰巧知道一些非常快的二进制协议(protocol),可以很容易地替换为 ;p

关于c# - 提高 XmlSerializer 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502356/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com