J4N*_*J4N 2 c# xml linq reflection serialization
在应用程序中,我们可以保存应用程序的当前状态及其配置(可能很大)。我们正在使用XmlSerializer
.
我们现在只有 XML 中需要的内容(所有 XmlIgnore 都已就位),并且存储整个配置(约 50-100MB 的文件)非常慢。
我们需要继续将此配置存储为 XML,但我们希望避免:
IXmlSerializable
接口我们的想法是在每个对象中实现一个方法,我们可以在其中注册我们想要序列化的字段/属性,然后有一个SerializationManager
能够读取我们想要序列化的内容,然后写入它们。
像这样,对象不知道它们将被呈现的语言 (XML),如果有一天我们想要二进制序列化(或者如果我们想要以不同格式序列化的可能性),我们可以。
但是我们不想重新发明轮子,我不知道是否存在某个库,或者诸如 Linq to xml 之类的东西是否可以提供帮助,或者这本身是否可行,...
那么你认为我如何才能做到这一点?
“反射,这是要慢”
除此之外,它在运行时不使用反射。它在第一次运行时执行元编程(假设您正在使用new XmlSerializer(type)
)来检查类型并生成适用于给定类型的静态代码。因此,任何与音量相关的性能问题都与反射无关。这里是一个机会,元编程本身可以采取可测量的时间,但一个:这是不可能的,除非你的模型确实复杂,和b:它可以通过使用来避免sgen.exe工具来组装预先生成的序列化。
因此,任何性能问题很可能是由于模型的大小和 xml 的开销造成的。
如果您想尝试不同的序列化程序,请考虑使用 protobuf-net 之类的东西。您将无法读取数据(它不会是 xml),但输出会更小更快。