gpt4 book ai didi

C# : Serialize objects to XML without reflection

转载 作者:数据小太阳 更新时间:2023-10-29 03:02:49 25 4
gpt4 key购买 nike

在应用程序中,我们可以保存应用程序的当前状态及其配置(可能非常庞大)。我们正在使用 XmlSerializer

我们现在在 XML 中只有我们需要的东西(所有 XmlIgnore 都已到位),并且存储整个配置(约 50-100MB 的文件)非常慢。

我们需要继续将此配置存储为 XML,但我们希望避免:

  • 反射(reflection),就是要慢
  • 实现IXmlSerializable接口(interface)

我们的想法是在每个对象中实现一个方法,我们可以在其中注册我们想要序列化的字段/属性,然后有一个能够读取我们想要的内容的 SerializationManager序列化,然后写入。

像这样,对象不知道它们将被呈现的语言(XML),如果有一天我们想要二进制序列化(或者如果我们想要以不同格式序列化的可能性),我们可以.

但我们不想重新发明轮子,我不知道是否存在某些库,或者是否有像 Linq to xml 这样的东西可以提供帮助,或者这是否是 native 可能的,...

那么你认为我怎样才能做到这一点?

最佳答案

“反射,就是要慢”

除此之外,它在运行时不使用反射。它在第一次运行时执行元编程(假设您正在使用 new XmlSerializer(type))来检查类型并生成适用于给定类型的静态代码。因此,任何与卷相关的性能问题都与反射无关。 元编程本身 可能会花费可测量的时间,但是 a:这不太可能,除非您的模型真的很复杂,并且 b : 可以通过使用 sgen.exe 来避免预生成序列化程序集的工具。

因此,任何性能问题很可能是由于模型的大小和 xml 的开销造成的。

如果你想尝试不同的序列化器,可以考虑像 protobuf-net 这样的东西。您将无法读取数据(它不会是 xml),但输出会更小更快。

关于C# : Serialize objects to XML without reflection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752944/

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